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

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


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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值