对于set的理解提高的一个问题

HashSet set = new HashSet();
Person p1 = new Person("AA",1001);
Person p2 = new Person("BB",1002);

set.add(p1);
set.add(p2);

p1.name = "CC";
set.remove(p1);//remove是通过调用hashCode方法计算哈希值找到要删除的索引位置进行删除,这时p1的name变了,也就是hashCode方法返回的是CC的哈希值,其索引位置与AA不同,所以删除不成功
System.out.println(set);//还是输出两个 CC 和 BB 
set.add(new Person("CC",1001));//这个时候添加,当然添加也是通过hashCode计算哈希值,找到底层数组所在的索引位置,然后发现为空,添加成功
System.out.println(set);//输出三个  其中两个CC 一个BB
set.add(new Person("AA",1001));//同理,先用hashCode计算哈希值,找到其索引位置,发现其位置上有元素,则再采用equals方法比对,发现equals返回false,则添加成功
System.out.println(set);//输出四个

对于set的理解提高的一个问题

 

 

对于set的理解提高的一个问题对于set的理解提高的一个问题

对于set的理解提高的一个问题

上一篇:1.项目介绍和专有名词


下一篇:SC Nacos 服务注册和发现202107