hashset添加元素的过程

  • -我们向hashset中添加元素a,首先调用a所在类的hashcode方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出在hashset底层数组中的存放(索引位置),判断此位置上是否已经有元素;

  • 如果此位置上没有其他元素,则添加成功–情况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

简称:七上八下

hashset底层:数组+链表

linkedhashset:

作为hashset的子类,在添加元素的同时,每个数据还委会了两个引用,记录此数据的前一个数据和后一个数据,对于频繁遍历的操作,效率高于hashset。

treeset:

  • 向treeset中添加的数据,要求时相同类的对象

  • 两种排序方式:自然排序(实现comparable接口)和定制排序

  • 自然排序中,比较两个对象是否相同的标准为:compareto返回0,不再是equals。

posted @ 2020-10-31 10:03  MrFugui  阅读(119)  评论(0编辑  收藏  举报