【问题标题】:Why, If two objects are not equal according to equals, they are not required to return different hashCode values? [duplicate]为什么,如果两个对象根据equals不相等,它们不需要返回不同的hashCode值? [复制]
【发布时间】:2011-04-04 02:58:57
【问题描述】:

可能的重复:
In Java, why must equals() and hashCode() be consistent?
Why hashCode() can return the same value for different objects in java?

在 JAVA API 中我们可以看到

如果两个对象不相等 等于,他们不需要 返回不同的 hashCode 值。

为什么会这样?

如果两个对象根据equals不相等,那么应该要求返回不同的hashCode值吧?

【问题讨论】:

标签: java


【解决方案1】:

哈希码是 AFAIR 一个 32 位整数,因此状态数限制为 2^32。几乎您创建的每个类都会有更多的可能状态,因此无法确保不同的对象不会具有相同的哈希码值。

哈希码不等意味着对象不相等,但是哈希码相等意味着对象可能相等。

【讨论】:

    【解决方案2】:

    原因基本上是因为hashCode和Equals码不一样。这就是为什么你有 equals()。

    hascode 可以(并且将会)发生冲突。您拥有价值 X 位的信息,但您将其编码为少于 X 位的散列(在此减少一些角落)。因此,某些重复项必须可用于不相等的对象。

    【讨论】:

      【解决方案3】:

      它们不需要返回不同的哈希码,但如果它们返回,所有与哈希相关的 Java 算法都会执行得更好,因为哈希冲突会更少。

      【讨论】:

      • 这不能回答问题。他在问为什么他们不需要返回不同的哈希码。
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多