余腾

导航

set的实现类

/**

  • Set框架结构
  • Collection接口:单列集合,用于存储一个一个的数据
  • Set接口 存储无序的 不可重复的数据 --》高中将的集合
  • HashSet 作为Set接口的主要实现类 线程不安全的 可以存储 null
  • 1、无序性:不等于随机性。存储的数据在底层数组中并非按照索引的顺序添加。而是根据数据的哈希值
  • 2、不可重复性:保证添加的元素按照equals()判断时 不能返回true
  • 添加元素的过程:HashSet为例
  • 我们向HashSet中添加元素a,首先调用元素a所在类的hasCode()方法 去计算元素a的hash值
  • 此hash值通过某种算法 计算出hashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素,
  • 如果此位置没有元素则a添加成功。 --------》情况1
  • 如果此位置上有其他元素b或以链表形式存在的多个元素,则比较元素a与元素b的hash值,
  • 如果hash值不相同则a添加成功 ----------》情况2
  • 如果hash值相同需要调用元素a的equals方法
  •    equals()返回true 元素a 添加失败
    
  •    equals()返回false  则元素a添加成功------------》情况3
    
  •    对于添加的情况2和3情况而言:元素a与已经在指定索引位置上数据以链表的方式存储
    
  •    jdk7:元素a放到数组中,指向原来的 元素
    
  •    jdk8 :原来的元素在数组中,指向元素a
    
  • LinkedHashSet HashSet的子类 在HashSet方面上加了一个指针(链表)
  • TreeSet 可以安装添加对象的指定属性 进行排序
    */

posted on 2021-07-29 21:05  余腾  阅读(167)  评论(0编辑  收藏  举报

Fork me on Gitee