金典例题---->集合中的set

本文通过代码示例解析了Java集合中Set的存储原理,重点讨论了哈希值在对象存储和移除过程中的作用。当对象的属性值改变时,原有的哈希值不再匹配,导致无法正确移除对象。同时,插入新对象时,哈希值相同的对象会通过equals()方法进行属性值比较,确保唯一性。
摘要由CSDN通过智能技术生成

集合中的set

直接上代码截图
在这里插入图片描述

第一次的输出:(都知道不解释)
第二次的输出:
在第一次插入之后,对p1的属性进行的重新的赋值,这个时候p1在set中的存放的位置不变。
重点–> 使用set来储存或者移除对象的时候,都会进行对象的哈希值的计算,来变来确定次对象储存的位置。这个也就是在进行频繁的查询的时候,set带来的优点。
也正是这样原因,在进行移除的时候,计算的是(1001 , ”CC“)的值。这个时候计算出来的值就不是存放p1的值(p1的存放位置是(1001 , “AA”))。
所以此时的p并没有移除。
第三次的输出:
这个时候进行插入的是
set.add(new Person(1001,“CC”));
这个时候计算的位置并没有存放任何的对象。这个时候就顺利的插入了。
第四次的输出:
set.add(new Person(1001,“AA”));
还是一样的会进行哈希值的计算,这个时候计算的位置就是p1对象的 位置,因为哈希值相同,并且这个位置上已经有了对象。这个时候就要进行
equals()进行比较。判断这两个对象的属性值是否相等。因为这两个的对象的属性值不等。所以这个时候也就存放成功。

所以最后的答案是
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值