首页 >Java >java教程 >如何为集合实现健壮的 hashCode() 方法?

如何为集合实现健壮的 hashCode() 方法?

Susan Sarandon
Susan Sarandon原创
2024-12-14 12:38:11789浏览

How to Implement a Robust hashCode() Method for Collections?

为集合实现 hashCode():最佳实践和注意事项

确定集合中 hashCode() 方法的最佳实现是一项细致入微的任务,很大程度上受到以下因素的影响具体的使用模式。然而,Josh Bloch 在他的开创性著作“Effective Java”(第 8 项,第二版)中概述了一种广泛认可且有效的方法。

Josh Bloch 的建议实施

根据 Bloch 的建议建议,应遵循以下步骤来创建有效的 hashCode()方法:

  1. 使用非零值初始化 int 结果变量。
  2. 迭代 equals() 方法中包含的每个字段 f。
  3. 根据每个字段f计算其哈希码c类型:

    • 对于布尔值:(f ? 0 : 1)
    • 对于基本类型(byte、char、short、int):(int)f
    • 对于长: (int)(f ^ (f >> 32))
    • 对于float:Float.floatToIntBits(f)
    • 对于 double:Double.doubleToLongBits(f)(作为 long 处理)
    • 对于对象:使用 hashCode() 结果,如果 f == 则为 0 null
    • 对于数组:递归计算每个数组的哈希值element
  4. 将计算出的哈希值c与结果相结合:

    result = 37 * result + c
  5. 返回最终结果

该方法背后的基本原理

该方法确保哈希值的正确分配通过有效地组合 equals() 方法中测试的所有字段的哈希码来获取大多数用例的值。组合步骤中乘以 37 进一步增强了分布。

结论

虽然可能没有普遍的“最佳”实现,但 Bloch 推荐的方法为创建有效的 hashCode 提供了坚实的基础( ) 集合方法。通过仔细考虑使用模式并应用概述的步骤,开发人员可以确保他们的集合在基于哈希的操作(例如 contains() 和 get())方面具有最佳性能。

以上是如何为集合实现健壮的 hashCode() 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn