HashSet中哈希码的运用,以及重复元素判断方法;

本文介绍了Java中HashSet集合判断元素重复的机制。HashSet存储元素时先调用对象的哈希值,在容器内搜索相同哈希值。若有相同哈希值,再调用equals方法判断。若equals为true则判定元素重复;若为false则判定不重复,采用“桶”存储,满后数组扩容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设一下一个HashSet集合:
HashSet set = new HashSet() ;
set.add(new String(“abc”)) ;
set.add(new String(“abc”)) ;
set.add(new String(“bbc”)) ;
set.add(new String(“bbc”)) ;

哈希表
在存储是会先调用对象哈希值new String(“abc”).hashCode(); 96354;
集合在容器内进行搜索,有没有和96354一样的哈希值;
如果没有,就会存在索引的上面;

再次存储的时候调用对象哈希值:
new String(“abc”).hashCode(); 96354;
集合在容器内找到了,已经有一个对象也是96354;
集合会让后来的对象new String(“abc”)调用方法equals(已经有的对象)
此时两个对象的哈希值是一样的;而且equals方法返回值为true ;此时集合判定元素重复;

此时继续存储一个数据new String(“adc”);
集合继续调用对象方法:
new String(“abc”).hashCode(); 假设此时Hash值也是 96354(假设值);
此时集合去容器中找,有没有96354的对象,找到有,
此时集合会让后面的对象new String(“abc”)调用方法equals(new String(“adc”));
此时结果是f,
两个对象new String(“abc”)和new String(“adc”)哈希值相同;但是equals结果fasle;
集合判定对象没有重复;采用了”桶”的存储方式;
判断后如果没有的话就会和链表一样连接到下面,由于加载因子是0.75;存到16*0.75满后数组扩容;
加载因子另叙;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值