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

时间:2015-02-13 07:22:52

标签: java hashcode

我在一本书中读过

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

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

OR

是否可能有多个元素具有相同的hashcode

3 个答案:

答案 0 :(得分:2)

通常,有两种方法可以处理两个或多个元素在哈希表中的同一个“桶”中结束的情况:

  • 存储桶可以是链接列表(或等效的)并包含大量元素。这就是HashMap的工作方式......虽然在Java 8中,链表可以是二叉树。

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


  

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

在Java中,HashMapHashtable及相关类使用密钥的equals方法来区分具有相同哈希码的密钥。这就是为什么我们有“hashcode / equals contract”。 (阅读here。)

  

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

是的,这是可能的。 Java的标准哈希表类应对它。见上文。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

可能有多个具有相同哈希码的元素导致哈希码的计数有限集。您可以通过equals()方法区分元素。