HashSet的add和remove作业

导读:本篇文章讲解 HashSet的add和remove作业,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

本文主要讲述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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98959.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!