目录
(1)底层是一个HashMap,如下图

(2)HashSet不保证元素是有序的;
(3)HashSet存放元素不能重复。
(4)底层数组一个链表元素达到8个,且数组大小为64,进行树化
(5)去重机制:hashCode()+equals(),底层通过存入对象,进行运算得到一个hash值,通过hash值得到对应索引,如果发现索引所在位置没有数据,直接存放,如果存在数据,进行equals()比较【遍历比较】,比较不相同,就加入,否则不加入
add()源码:
执行add()添加方法,为空表明添加成功

执行put()方法,value为PRESENT共享

hash()方法计算hash值,hash值无符号右移16位,hash值不是hashCode

putVal()方法





(1)底层维护数组+双向链表;
(2)使用链表维护元素次序,看起来为按顺序插入;
(3)不允许重复添加元素。
(4)底层是LinkedHashMap,LinkedHashSet底层为HashMap
添加元素源码与HashSet相同;
(1)特点
①使用无参构造,创建TreeSet,依旧是无序的;
②使用TreeSet提供构造器可以传入一个比较器,底层就是TreeMap
③去重机制:如果传入一个Compartor匿名对象,使用compare去重,如果方法返回0,认为是相同元素,就不添加,若没有传入Comparator匿名对象,则以添加对象实现的Compareable接口中的compareTo去重
(2)源码

添加元素源码

在调用add方法时,在底层执行到下面。
①cpr为匿名内部类,动态绑定到我们自定义的comapre方法;
②如果数据相等,数据不添加

