【问题标题】:JAVA: HashCode : Is it possible more than one elemets has same hashcode? [duplicate]JAVA: HashCode : 是否有可能多个元素具有相同的哈希码? [复制]
【发布时间】:2015-04-14 04:35:18
【问题描述】:

我读过一本书

“从hashcode()收到的值被用作存储元素的桶号。”

我怀疑桶是否包含多个元素(具有相同的hashcode值),如何区分元素?

是否有可能不止一个元素具有相同的hashcode

【问题讨论】:

  • 桶可以包含多个元素。容器将使用equals() 来检查它们中的每一个是否都是您要查找的东西。

标签: java hashcode


【解决方案1】:

一般来说,有两种方法可以处理两个或多个元素最终位于哈希表中的同一个“桶”中的情况:

  • 一个bucket可以是一个链表(或等价物)并且包含很多元素。这就是HashMap 的工作原理……尽管在 Java 8 中,链表可以是二叉树。

  • 一个桶可以有一个有界的大小,然后“溢出”到另一个桶中。


我怀疑桶是否包含多个元素(具有相同的哈希码值)。如何区分元素?

在 Java 中,HashMapHashtable 和相关类使用 key 的 equals 方法来区分具有相同 hashcode 的 key。这就是我们有“hashcode / equals contract”的原因。 (阅读它here。)

是否可能有多个元素具有相同的哈希码?

是的,这是可能的。 Java 的标准哈希表类可以处理它。见上文。

【讨论】:

    【解决方案2】:

    多个元素可以具有相同的哈希码。在这种情况下,将使用 equals() 方法检查该存储桶中的所有元素,以确定其中一个是否与您要查找的匹配。

    【讨论】:

      【解决方案3】:

      可能有多个元素具有相同的哈希码,因为哈希码的数量是有限的。您可以通过equals() 方法区分元素。

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多