HashSet中判断两个元素是否重复的标准,以及重复后的存储方式

Set集合的存储特点是:元素之间不能重复、元素之间没有顺序。

HashSet判断元素是否相等的依据:对象的equals()比较返回false;且hashCode值不相等,判断两个元素不相等;

那么equals()方法和hashCode值不一致的情况呢?

*上面的代码C对象 添加了一个有一个没有被添加进来,其余的都被添加进来了。

分析:
 *第一种情况A对象,equals:比较相同,hashcode:比较不同
 *    由于两个对象的hashcode值不同所以HashSet将会把他们存储在不同的位置(HaseSet根据不同的hashcode来存储值)
 *第二种情况B对象,equals:比较不同,hashcode:比较相同
 *    由于两个对象的hashcode值相等,HashSet试图把它保存在同一位置,而实际上又不行,所以他们会放在同一个"槽位"中,导致发生性能降低。
 *第二种情况C对象,equals:比较相同,hashcode:比较相同
 *    创建一个对象
 *注意:一般情况两个对象的equals和hashcode两个比较结果应该保持一致
 *
 *hashset与数组的区别:
 *数组元素的长度是固定的、数组的索引也是连续的,无法自由增加数组的长度。而set和他相反。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值