Java 的 HashSet<Double> 及其子集的哈希码的唯一性
Uniqueness of hashcode for Java's HashSet<Double> and its subsets
如果我有一个 Java HashSet<Double>
,长度范围为 1 到 10.000,这个集合及其所有子集的哈希码是否唯一?
没有。 Object.hashCode()
方法实现(例如 HashSet.hashCode()
)不保证 return 一个唯一值,只有一个伪随机值,足以满足哈希数据结构的目的。
如果您需要根据设置的内容为 HashSet<Double>
设置一个唯一值,您应该自己实现它。
集合的哈希码定义为集合中元素的哈希码之和,其中null
个元素的哈希码定义为zero
。这确保 s1.equals(s2)
意味着 s1.hashCode()==s2.hashCode()
对于任何两个集合 s1
和 s2
,正如 Object.hashCode
.
的总合同所要求的
如果我有一个 Java HashSet<Double>
,长度范围为 1 到 10.000,这个集合及其所有子集的哈希码是否唯一?
没有。 Object.hashCode()
方法实现(例如 HashSet.hashCode()
)不保证 return 一个唯一值,只有一个伪随机值,足以满足哈希数据结构的目的。
如果您需要根据设置的内容为 HashSet<Double>
设置一个唯一值,您应该自己实现它。
集合的哈希码定义为集合中元素的哈希码之和,其中null
个元素的哈希码定义为zero
。这确保 s1.equals(s2)
意味着 s1.hashCode()==s2.hashCode()
对于任何两个集合 s1
和 s2
,正如 Object.hashCode
.