Java中Set里remove详解

例如

 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 

 

posted @ 2023-02-01 09:37  审批人  阅读(367)  评论(0)    收藏  举报