JDK本身针对此问题提出了以下解决方案。java.util.Set接口的协定规定:
返回此集合的哈希码值。集合的哈希码定义为集合中元素的哈希码之和,其中空元素的哈希码定义为零。这可以确保s1.equals(s2)暗示了Object.hashCode()的一般合同要求的任意两个s1和s2集的s1.hashCode()==
s2.hashCode()。
使用条目的哈希码总和的替代方法是使用
^(XOR)运算符。
Scala语言使用Murmurhash算法的不变序版本(请参阅私有
scala.util.hashing.MurmurHash3类)来实现其不可变集和类似集合的
hashCode(或
##)方法。



