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、HashMap
、Hashtable
和相关的类中,使用key的equals
方法来区分具有相同hashcode的key。这就是为什么我们有 "hashcode / equals contract"。 (了解一下 here。)
Is it possible more than one elemets has same hashcode?
是的,这是可能的。 Java 的标准散列 table 类 可以应付。见上文。
我在一本书上读到
"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、HashMap
、Hashtable
和相关的类中,使用key的equals
方法来区分具有相同hashcode的key。这就是为什么我们有 "hashcode / equals contract"。 (了解一下 here。)
Is it possible more than one elemets has same hashcode?
是的,这是可能的。 Java 的标准散列 table 类 可以应付。见上文。