为集合实现 hashCode()
集合的 hashCode() 的最佳实现取决于其使用模式。然而,Josh Bloch 在他的《Effective Java》一书中提出的一种被广泛接受的方法如下:
算法:
- 分配一个非零值值到整数变量结果。
-
对于在equals() 方法:
- 对于布尔字段,计算 (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。
- 对于数组字段,递归计算每个元素的哈希值并组合它们。
- 将每个哈希值 c 与结果组合: result = 37 * result c .
- 返回
优点:
- 为大多数用例提供合理的哈希值分布。
- 有条不紊的方法确保一致性跨不同数据类型的行为。
- 对影响对象的更改敏感平等。
以上是如何有效地实现集合的hashCode()?的详细内容。更多信息请关注PHP中文网其他相关文章!