为什么要覆盖hashCode方法?

时间:2014-09-09 10:05:34

标签: java hashcode

这意味着什么:

public int hashCode() {
       return HashCodeBuilder.reflectionHashCode(this);
}

请问有人可以在上面解释一下代码吗?

2 个答案:

答案 0 :(得分:3)

hashCode是一种确定两个东西是否不相等的快速方法:它们是否具有不同的hashCodes。所以如果你有一本带有i.a.的课程书。字段ISBN,然后您可以在ISBN代码上定义equalshashCode可以是ISBN值的hashCode。

HashCodeBuilder是一个实用程序,可以生成所有字段的哈希码,有点太多了。但那会找到平等的对象。

不定义hashCode将默认为Object.hashCode,并且大多数两个“相等”对象仍将具有不同的哈希码,这使得它们无用。

像HashMap和HashSet这样的数据结构使用hashCode来极大地加快速度。然后,不同的hashCodes意味着不同的对象。等号hashCodes仍然意味着必须测试.equals

答案 1 :(得分:0)

它是对象实例的整数表示。两个相等的对象必须具有相同的hashCodes,但是它可能发生,2个不相等的对象可以具有相同的hashCodes。当您在数据结构(如Maps,Sets)中使用对象时,实现它很重要,因为它们使用hashCodes将对象放在正确的位置。

如果你没有实现它,继承自Object类的默认实现是使用引用,因此只有当两个对象是相同的对象(例如x == y)时才会有相同的哈希码。

因此,如果您不实现hashCode()并且您将此对象添加到Map,它将起作用,但是非常有用(O(n)),另一方面使用完美的哈希算法它将接近O(1)。