tangguo

集合的hashCode方法的最佳实现

java

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


阅读 230

收藏
2020-10-12

共1个答案

小编典典

最好的实现?这是一个难题,因为它取决于使用模式。

在几乎所有情况下,Josh Bloch的 有效Java项目8(第二版)中都提出了合理的良好实现。最好的办法是在那里查找,因为作者在那里解释了为什么这种方法很好。

简短版
1. 创建一个int result并分配一个非零值。

  1. 对于在方法中测试的每个字段 f,通过以下equals()方式计算哈希码c:

  2. 如果字段f为boolean:计算(f ? 0 : 1);

  3. 如果该字段f是byte,char,short或int:计算(int)f;
  4. 如果字段f为long:计算(int)(f ^ (f >>> 32));
  5. 如果字段f为float:计算Float.floatToIntBits(f);
  6. 如果字段f是double:计算Double.doubleToLongBits(f)和处理返回值,就像每个长值一样;
  7. 如果字段f是一个对象:使用hashCode()方法的结果或如果为0 f == null;
  8. 如果字段f是一个数组:请将每个字段视为单独的元素,并以递归方式计算哈希值,然后组合值,如下所述。
  9. 将哈希值cresult
result = 37 * result + c
  1. 返回 result
2020-10-12