首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java - TreeSet和hashCode()

Java - TreeSet和hashCode()
EN

Stack Overflow用户
提问于 2009-09-24 09:55:48
回答 2查看 15.3K关注 0票数 21

我有一个关于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是不同的。你知道为什么吗?这真的很令人困惑,如果能帮上忙,我会很感激的。

EN

回答 2

Stack Overflow用户

发布于 2009-09-24 10:10:48

你需要阅读Joshua Bloch的"Effective“第三章,它解释了equals契约以及如何正确覆盖equals、hashCode和compareTo。

票数 0
EN

Stack Overflow用户

发布于 2010-03-29 21:46:39

您不需要检查它是否包含,因为insert()基本上在它到达插入点的过程中执行相同的操作(即搜索正确的位置)。如果不能插入对象(即对象已经包含),则insert返回false。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1470735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档