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个对象

最新文章

  1. JVM-内存管理
  2. Reading Notes of Acceptance Test Engineering Guide
  3. angularjs取Sevice和directive的引用
  4. [Oracle] Oracle和SQLServer的数据类型比较
  5. 转一个distinct用法,很有帮助
  6. java动态编程库,利用动态编程打印运行时调用全景(函数调用关系链)
  7. enigma机的原理
  8. Asp.Net--上传大文件(页面超时)
  9. Zeppelin 用jdbc连接hive报错
  10. Vue 实际项目中你可能会遇见的坑
  11. django restframework
  12. redis在Windows10下的安装
  13. 采石厂管理系统V3.0版本上线(采石厂车辆出入管理系统,石厂开票系统)
  14. DotNetCore学习-1.读取Json配置并绑定到配置类实例
  15. C - Cake HDU - 1722 (数学)
  16. Centos7安装Nginx实战
  17. 无法打开物理文件 XXX.mdf",操作系统错误 5:"5(拒绝访问。)"的解决办法
  18. linq to sql 项目移植后,数据库实体类需要重新创建?
  19. springMVC入门-02
  20. iptables简单规则记录

热门文章

  1. CF1039D-You Are Given a Tree【根号分治,贪心】
  2. P2012-拯救世界2【EGF】
  3. P3760-[TJOI2017]异或和【树状数组】
  4. 图神经网络(GNN)--slide
  5. 支持remote write和exemplar的prometheus服务
  6. RabbitMQ 3.9.7 镜像模式集群与Springboot 2.5.5 整合
  7. 6岁!是时候重新认识下Serverless了
  8. 2020.10.23-vj个人赛补题
  9. CompleteFuture实现简单的任务编排实践
  10. flask 之上传本地图片