问题背景:HashSet结构内置的数组table中存储的一条链表或者一颗红黑树上的节点的哈希值是一样的吗
代码
HashSet hashSet = new HashSet();
Person p1 = new Person(1001, "AA");
Person p2 = new Person(1002, "BB");
hashSet.add(p1);
hashSet.add(p2);
p1.name = "CC";
hashSet.remove(p1);
System.out.println(hashSet);
hashSet.add(new Person(1001, "CC"));
System.out.println(hashSet);
hashSet.add(new Person(1001, "AA"));
System.out.println(hashSet);
//其中Person类重写了hashCode方法和equals方法
class Person {
int id;
String name;
public Person_(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person_)) return false;
Person_ person_ = (Person_) o;
return id == person_.id &&
Objects.equals(name, person_.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@Override
public String toString() {
return "Person_{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
运行结果:
debug查看table数组,发现同一条链表的哈希值可以不一样