zoukankan      html  css  js  c++  java
  • J-18 集合对象

    SET接口

    SET接口
    HashSet类
    LinkedHashSet类
    TreeSet类

    SET接口

    一、Set接口概述

    一个不包含重复元素的 collection。无序唯一

    二、Set案例

    存储字符串并遍历
    存储自定义对象并遍历

    HashSet类

    一、HashSet类概述

    底层数据结构是哈希表。
    不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变。

    二、HashSet如何保证元素唯一性

    • 底层数据结构是哈希表(元素是链表的数组),哈希表依赖于哈希值存储
    • 通过查看add方法的源码,add功能底层依赖两个方法:
      int hashCode()
      boolean equals(Object obj)
      步骤:
      ① 比较哈希值;
      ② 若相同,比较地址值或equals();
      ③ 不同就添加到集合中。

    三、注意:

    HashSet集合,底层是哈希表结构。而哈希表结构底层依赖hashCode()和equals()方法。
    如果你认为对象的成员变量相同即为同一个对象的话,应该重写这两个方法。
    如何重写?系统生成。

    LinkedHashSet类

    LinkedHashSet类概述

    底层数据结构由哈希表和链表组成。
    元素有序唯一;
    链表保证元素有序(存储和取出一致);
    哈希表保证元素唯一

    TreeSet类

    一、TreeSet类概述

    底层数据结构是红黑二叉树结构(一种自平衡的二叉树)。
    使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

    • TreeSet特点:排序、唯一。

    • 能够对元素按照某种规则进行排序。

    • 排序方式:
      ① 自然排序 Comparable
      比较依赖于compareTo()方法,这个方法定义在Comparable里面。
      ② 比较器排序 Comparator

    二、TreeSet是如何保证元素的排序和唯一性的

    底层数据结构是红黑树(红黑树是一种自平衡的二叉树)

    • 存储方法:
      第一个元素存储时作为根节点存储,
      从第二个元素开始从根节点开始比较:
      ① 大 -- 右孩子
      ② 小 -- 左孩子
      ③ 相等 -- 不存储(保证唯一性)

    • 取出方法:
      从根节点开始,按照左中右的原则依次取出元素。

    三、注意

    使用TreeSet进行元素排序,需要实现Comparable接口,实现方式根据排序条件。

  • 相关阅读:
    挖矿程序linux 删除
    本地复制vue项目
    新建vue项目
    CentOS7单用户模式
    CentOS6
    CentOS6-系统管理操作
    CentOS7-系统管理操作
    VMWare克隆虚拟机
    虚拟机网络模式设置为NAT
    VI/VIM编辑器
  • 原文地址:https://www.cnblogs.com/android-lyz/p/5108661.html
Copyright © 2011-2022 走看看