HashSet存储过程以及Set集合存储元素不重复的原因

哈希值是对象的逻辑地址,用于存储数据时快速定位。Java中,`hashCode`方法用于获取对象的哈希值。早期哈希表通过数组+链表处理冲突,而现代实现可能使用红黑树提升查询效率。当链表长度超过8时,会转为红黑树。Set集合利用`hashCode`和`equals`方法确保元素不重复,通过哈希值分组并检查元素是否已存在。
摘要由CSDN通过智能技术生成

哈希值:哈希值是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址值,是模拟出来的,不是数据实际的物理地址)

在object类有一个方法,可以获取对象的哈希值

hashCode:返回对象的哈希值

版本比较

jdk版本之前:哈希表+数组+链表

jdk版本之后 哈希表+链表

​ 哈希表+数组+红黑树(提高查询速度)

数组 :把元素进行分组(相同哈希值的元素是一组)

链表/红黑树:把相同哈希值的元素连接到一起

初始 容量 :16

存储步骤:

  1. 存储数据到集合中,先计算元素的哈希值
  2. 然后把元素放在这个哈希值下面,两个元素不同,但是哈希值相同,会造成哈希冲突,这时,形成链表进行存储元素,如果链表的长度超过8位那么就会把链表转换为红黑树(为了提高查询的速度)

Set集合存储元素不重复的原因:

set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复

计算出一个值的hashCode方法,在集合中没有找到这个元素,发现没有,就会把这个元素存储到集合中,如果有,会调用equals方法进行判断,发返false 就进行存储,返回true就不存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值