例如
1 HashSet set = new HashSet(); 2 Person p1 = new Person(1001,"AA"); 3 Person p2 = new Person(1002,"BB"); 4 set.add(p1); 5 set.add(p2); 6 p1.name = "CC"; 7 set.remove(p1); 8 System.out.println(set); 9 set.add(new Person(1001,"CC")); 10 System.out.println(set); 11 set.add(new Person(1001,"AA")); 12 System.out.println(set)
p1.name="CC";//把原本的AA改为CC 此时p1 为 1001 CC
set.remove(p1); // 此时用索引去查找 p1 为1001 CC,然后在set里去remove p1时,先计算p1 1001 CC 的hash值,然后去remove ,而之前p1 1001 AA 的hash值是根据 1001 AA 计算的,修改为 CC 之后的hash值 很大概率和AA不一致,然后去remove的时候,可能就没删除掉 p1 1001 CC
标签:AA,set,Java,CC,p1,remove,Set,1001 From: https://www.cnblogs.com/rpbszy/p/17081519.html