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

JAVA: HashCode : Is it possible more than one elemets has same hashcode?

我在一本书上读到

"The value received from hashcode() is used as bucket number for storing elements."

我的疑问是,如果桶中包含多个元素(具有相同的 hashcode 值),如何区分这些元素?

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

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

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

一般来说,有两种方法可以处理散列中两个或多个元素在相同 "bucket" 中的情况 table:

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

  • 一个 bucket 可以有一个 bounded size,然后 "overflow" 到另一个 bucket。


My doubt is if the bucket contains more than one elements(with same hashcode value). How can differentiate the elements ?

在Java、HashMapHashtable和相关的类中,使用key的equals方法来区分具有相同hashcode的key。这就是为什么我们有 "hashcode / equals contract"。 (了解一下 here。)

Is it possible more than one elemets has same hashcode?

是的,这是可能的。 Java 的标准散列 table 类 可以应付。见上文。