我有一个关于TreeSet
集合和hashCode
方法的快速问题。我有一个TreeSet
,并且我正在向它添加对象,在添加对象之前,我使用contains
方法检查它是否存在于TreeSet
中。
我有两个不同的对象,每个对象都使用我的hashCode方法实现生成一个不同的hashCode,示例如下:
public int hashCode()
{
int hash = 7;
hash = hash * 31 + anAttribute.hashCode();
hash = hash * 31 + anotherAttribute.hashCode();
hash = hash * 31 + yetAnotherAttribute.hashCode();
return hash;
}
特定运行的hashCodes是: 76126352和76126353 (这两个对象在一个属性上只有一个数字的差异)。
contains方法为这些对象返回true,即使hashCodes是不同的。你知道为什么吗?这真的很令人困惑,如果能帮上忙,我会很感激的。
发布于 2009-09-24 10:10:48
你需要阅读Joshua Bloch的"Effective“第三章,它解释了equals契约以及如何正确覆盖equals、hashCode和compareTo。
发布于 2010-03-29 21:46:39
您不需要检查它是否包含,因为insert()基本上在它到达插入点的过程中执行相同的操作(即搜索正确的位置)。如果不能插入对象(即对象已经包含),则insert返回false。
https://stackoverflow.com/questions/1470735
复制相似问题