楼上手抖了..
集合中存放的是对象的地址,hashSet中对象的地址是根据对象的哈希值分配的,
比如对象被存入到hashSet中,存入到了0x0023这个地址,此时改变改变参与运算hashcode值的变量后,
hashCode值发生变化,hashSet根据这个值分配的内存地址可能是0x0088,但是对象此刻存的位置却是0x0023,
当调用remove,contains方法时,都走的是hashCode方法,得到的地址是0x0088,hashSet中这个位置没有对应的对象,那么就返回false,操作失败。
但是这个对象还是在hashSet中的,所以遍历的到。 |