关于HashSet增删的问题,改变哈希值

img

这个是输出的结果

img

想半天想不出来是因为,还请指教一二,这个是说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并不会自动给你重新计算元素应该放哪个位置。