我个人会避免XOR-这意味着任何两个相等的值都将导致0-因此hash(1,1)== hash(2,2)== hash(3,3)等。另外hash(5,0)
== hash(0,5)等可能偶尔出现。我 已经 刻意用它集合散列-如果你想哈希项目的顺序,你 不 关心的排序,这是不错的。
我通常使用:
unchecked{ int hash = 17; hash = hash * 31 + firstField.GetHashCode(); hash = hash * 31 + secondField.GetHashCode(); return hash;}
这就是Josh Bloch在Effective Java中建议的形式。上次回答类似的问题时,我设法找到了一篇文章进行了详细讨论-
IIRC,没有人真正知道它为什么运作良好,但确实如此。它也很容易记住,易于实现,并且易于扩展到任意多个字段。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)