HashSet的add和remove作业

本文主要讲述HashSet的一道作业题,给出示例代码,讲出输出的内容。

一. 示例代码如下:

 1 public class HomeWork06 {
 2     public static void main(String[] args) {
 3         HashSet hashSet = new HashSet();
 4         Person p1 = new Person(1001,"AA");
 5         Person p2 = new Person(1002, "BB");
 6         hashSet.add(p1);
 7         hashSet.add(p2);
 8         p1.setName("CC");
 9         hashSet.remove(p1);
10         System.out.println(hashSet);
11         hashSet.add(new Person(1001,"CC"));
12         System.out.println(hashSet);
13         hashSet.add(new Person(1001,"AA"));
14         System.out.println(hashSet);
15 
16     }
17 }
18 
19 class Person {
20     private int id;
21     private String name;
22 
23     public Person(int id, String name) {
24         this.id = id;
25         this.name = name;
26     }
27 
28     public String getName() {
29         return name;
30     }
31 
32     public void setName(String name) {
33         this.name = name;
34     }
35 
36     @Override
37     public boolean equals(Object o) {
38         if (this == o) return true;
39         if (o == null || getClass() != o.getClass()) return false;
40         Person person = (Person) o;
41         return id == person.id && Objects.equals(name, person.name);
42     }
43 
44     @Override
45     public int hashCode() {
46         return Objects.hash(id, name);
47     }
48 
49     @Override
50     public String toString() {
51         return "Person{" +
52                 "id=" + id +
53                 ", name='" + name + '\'' +
54                 '}';
55     }
56 }

问输出什么?

二. 代码逐句解析

hashSet.add(p1);
hashSet.add(p2);

hashSet 添加了p1,p2 Person类对象。

p1.setName("CC");
hashSet.remove(p1);

将p1的name由AA ->CC,之后调用remove(p1),p1的hash值已经不一样了,因此在修改了p1的name之后,对应的table的索引已经不一样了,所以无法将p1删除。table的元素有:p1和p2

hashSet.add(new Person(1001,"CC"));

在hashSet中添加new Person(1001,"CC"),由1001和CC得到的hash值,与p1的不一样【p1的hash值是由1001,AA得到的】,因此添加成功。此时table中的元素有:p1和p2,new Person(1001,"CC")。

hashSet.add(new Person(1001,"AA"));

在hashSet中添加new Person(1001,"AA"),由1001和AA得到的hash值,与p1是相同的,即table的索引相同,但是此时p1是1001,"CC",新添加的对象是1001,"AA",二者不相同,因此,new Person(1001,"AA")会添加到p1的后面,形成一条单链表。

在HashSet的table表中共有4个对象。

三. 运行结果

vip

 

posted @ 2023-01-03 18:56  zwGitOne  阅读(52)  评论(0)    收藏  举报