我在一本书中读过
“从hashcode()
收到的值用作存储元素的存储桶编号。”
我怀疑的是,如果存储桶包含多个元素(具有相同的hashcode
值),如何区分元素?
OR
是否可能有多个元素具有相同的hashcode
?
答案 0 :(得分:2)
通常,有两种方法可以处理两个或多个元素在哈希表中的同一个“桶”中结束的情况:
存储桶可以是链接列表(或等效的)并包含大量元素。这就是HashMap
的工作方式......虽然在Java 8中,链表可以是二叉树。
一个桶可以有一个有限的大小,然后“溢出”到另一个桶中。
我怀疑是否包含多个元素(具有相同的哈希码值)。如何区分元素?
在Java中,HashMap
,Hashtable
及相关类使用密钥的equals
方法来区分具有相同哈希码的密钥。这就是为什么我们有“hashcode / equals contract”。 (阅读here。)
是否可能有多个elemets具有相同的哈希码?
是的,这是可能的。 Java的标准哈希表类应对它。见上文。
答案 1 :(得分:0)
多个元素可以具有相同的哈希码。在这种情况下,将使用equals()
方法检查该存储桶中的所有元素,以确定其中一个元素是否与您要查找的元素匹配。
答案 2 :(得分:0)
可能有多个具有相同哈希码的元素导致哈希码的计数有限集。您可以通过equals()
方法区分元素。