HashSet的remove方法(一道面试题)

 1 public class CollectionTest {
 2 
 3     @Test
 4     public void test3(){
 5         HashSet set = new HashSet();
 6         Person p1 = new Person(1001,"AA");
 7         Person p2 = new Person(1002,"BB");
 8 
 9         set.add(p1);
10         set.add(p2);
11         System.out.println(set);    
12         //输出2个值[person={1001,"AA"},person={1002,"BB"}]
13 
14         p1.name = "CC";
15         set.remove(p1);
16         System.out.println(set);
17         //输出两个值[person={1001,"CC"},person={1001,"BB"}]
18     
19         set.add(new Person(1001,"CC"));
20         System.out.println(set);
21         //输出三个值  [person={1001,"CC"},person={1002,"BB"},person={1001,"CC"]
22 
23         set.add(new Person(1001,"AA"));
24         System.out.println(set);
25         //输出四个值 [person={1001,"CC"},person={1002,"BB"},person={1001,"CC",person={1001,"AA"]
26         
27     }
28 }                

 

Set类remove方法删除元素的原则:根据哈希值来删除元素

Set类的添加原则:首先比较哈希值,如果哈希值相同就使用equals()方法来判断,相同删掉,不同添加。

例如:

第二个输出:因为修改了p1的属性变量,使p1的哈希值发生改变。故删除元素时,大概率是删除不掉p1的值

第三个输出:添加了新的对象,用cc的属性来计算哈希值。之前cc是由aa改变的,地址没有发生变化。故cc的哈希地址存在,可以输出三个对象

第四个输出:添加了aa对象,和最开始的对象相同,哈希值相同。比较equals(),属性不同。故能添加aa对象,输出4个对象

posted @ 2021-10-29 12:03  _图南  阅读(483)  评论(0编辑  收藏  举报