hashCode方法的最佳实现

问题:

我们如何决定一个集合的hashCode()方法的最佳实现(假设equals方法被正确覆盖)?

回答:

最好的实现?这是一个困难的问题,因为它取决于使用模式。
A在几乎所有情况下,在第8项Josh Bloch中提出了合理的良好实施。最好的事情是在那里查找,因为作者解释了为什么这种方法是好的。

一个简短的版本

  1. 创建一个int result并分配非零值。
  2. 对于在equals()方法中测试的every field f,通过以下方式计算哈希码c
     

    • If the field f is a boolean:
      calculate (f ? 0 : 1);
    • If the field f is a byte, char, short or int: calculate (int)f;
    • If the field f is a long: calculate (int)(f ^ (f >>> 32));
    • If the field f is a float: calculate Float.floatToIntBits(f);
    • If the field f is a double: calculate Double.doubleToLongBits(f) and handle the return value like every long value;
    • If the field f is an object: Use the result of the hashCode() method or 0 if f == null;
    • If the field f is an array: see every field as separate element and calculate the hash value in a recursive fashion and combine the values as described next.
  3. 将哈希值cresult相结合
      result = 37 * result + c
  4. 返回result

这应该导致大多数使用情况下哈希值的正确分配。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Best implementation for hashCode method

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 13 = 21