仅用于个人学习
注意事项:
1.向Set(主要指:HashSet、LinkedHashSet)中添加的数据,其所在的类一定要重写hashCode()和equals()
2.重写的hashCode()和equals()尽可能保持一致性:即相等的对象必须具有相等的散列码(哈希值)
如图:
解答:
HashSet set = new HashSet();
Person p1 = new Person(1001,"AA");
Person p2 = new Person(1002,"BB");
set.add(p1);
set.add(p2);
p1.name = "CC";// 此时p1的hashCode不发生改变
set.remove(p1);// p1的hashCode值经过修改后,此时拿p1(修改后的)与set中所对应p1的hashCode值比较,删除了一个null值。
System.out.println(set);
set.add(new Person(1001,"CC")); //添加成功,对应的hashcode中没有对象
System.out.println(set);
set.add(new Person(1001,"AA")); //添加成功虽然hashcode与p1相同但equals方法不相同,以单链表的形式存在(七上八下)
System.out.println(set);