【发布时间】:2015-07-10 09:22:04
【问题描述】:
我有一个需要添加到 HashSet 的对象列表,例如 List<Node> books。进一步说,没有两本书是平等的,因为它们的equals 方法都将返回 false;然而,假设他们的hashCode 方法每个都返回1。我正在使用这种极端情况,以便我可以完全理解录取是如何运作的。所以我的问题是:HashSet 会承认我所有的对象吗?
public class Book{
...
@Override
public boolean equals(Book other){
return false;
}
@Override
public int hashCode(){
return 1;
}
}
回想一下,hashSet 不允许重复。
我对此感到疑惑,因为 hashSet 的名称正是使用对象的哈希值。该哈希是否与添加对象的 hashCode 有关?
是的,我是aware of
如果指定元素尚不存在,则将其添加到此集合中。 更正式地说,如果这个集合,则将指定的元素 e 添加到这个集合中 不包含元素 e2 使得 (e==null ? e2==null : e.equals(e2))。 如果该集合已经包含该元素,则调用离开该集合 不变并返回 false。
但是对象的hashCode和它在HashSet中的hash值有什么关系呢?
【问题讨论】:
标签: java equals hashcode hashset