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() 对于任何两个集合 s1s2,正如 Object.hashCode.

的总合同所要求的