HashSet set = new HashSet();
Person p1 = new Person("AA",1001);
Person p2 = new Person("BB",1002);
set.add(p1);
set.add(p2);
p1.name = "CC";
set.remove(p1);//remove是通过调用hashCode方法计算哈希值找到要删除的索引位置进行删除,这时p1的name变了,也就是hashCode方法返回的是CC的哈希值,其索引位置与AA不同,所以删除不成功
System.out.println(set);//还是输出两个 CC 和 BB
set.add(new Person("CC",1001));//这个时候添加,当然添加也是通过hashCode计算哈希值,找到底层数组所在的索引位置,然后发现为空,添加成功
System.out.println(set);//输出三个 其中两个CC 一个BB
set.add(new Person("AA",1001));//同理,先用hashCode计算哈希值,找到其索引位置,发现其位置上有元素,则再采用equals方法比对,发现equals返回false,则添加成功
System.out.println(set);//输出四个
![]()
![]()
![]()