为什么Set集合是无序和不重复的?

    xiaoxiao2022-07-07  162

    ###Set集合元素为什么不重复,是如何实现不重复的? 对于基本数据类型特征的数据,Set集合可以直接比较是否相等,相等就去掉重复。 对于引用数据类型的数据,Set集合将会按照如下流程判断是否重复:

    Set集合每次添加元素的时候,会自动提取两个对象。 然后让两个对象调用自己的hashCode()方法(继承自Object)得到彼此的哈希值(所谓的内存地址) 然后判断两个对象的哈希值是否一样,如果不一样认为两个对象不重复,都保留。 如果两个对象的哈希值一样,Set集合会继续让两个对象进行equlas比较, 如果equlas比较结果不一样,则认为两个对象不重复,都保留。 如果equlas比较结果一样,则认为两个对象重复,保留一个。

    ###HashSet集合的元素为什么是无序的,是如何实现元素无序的。 因为set集合底层是基于哈希表存储的。 jdk1.8之前,哈希表是由:数组和链表组成的, jdk1.8之后,哈希表是由:数组+链表+排序二叉树组成 JDK 1.8之后,如果链表的长度超过或者等于了阈值(7)的时候会自动转成红黑树,性能进一步提高了 二叉树:只有一个个节点,两个分节点。 排序二叉树:小在左,大在右。 (以上只基于个人总结,仅供参考)

    最新回复(0)