这个是输出的结果
想半天想不出来是因为,还请指教一二,这个是说p1.name被更改, 然后哈希值不对,remove找不到这个位置 所以就删除不了。我也不知道这个书佛啊正不正确,还有为什么他最后会输出4个对象出来呀
这个是输出的结果
想半天想不出来是因为,还请指教一二,这个是说p1.name被更改, 然后哈希值不对,remove找不到这个位置 所以就删除不了。我也不知道这个书佛啊正不正确,还有为什么他最后会输出4个对象出来呀
首先明确一点:HashSet中找到一个对象首先会根据对象的hashCode
方法计算出hash,用这个hash找到一个坐标,再在这个坐标下找equals
方法判断相等的对象。
你重写了hashCode
方法,使得对象的hash会根据name
变化。假设第一次p1.name为AA
时,p1是放在3
号坐标下的。后面你把p1.name改成了CC
,这个时候去删除,根据CC
这个计算出的坐标是1
,然后去1
号坐标下找,原来的p1是放在3
下面的,当然就找不到喽。
干掉hashCode
的重写就可以删除了。
补充:你改变了对象属性,HashSet并不会
自动给你重新计算元素应该放哪个位置。