我们如何确定hashCode()用于集合的方法的最佳实现(假设equals方法已被正确覆盖)?
hashCode()
最好的实现?这是一个难题,因为它取决于使用模式。
在几乎所有情况下,Josh Bloch的 有效Java项目8(第二版)中都提出了合理的良好实现。最好的办法是在那里查找,因为作者在那里解释了为什么这种方法很好。
简短版 1. 创建一个int result并分配一个非零值。
int result
对于在方法中测试的每个字段 f,通过以下equals()方式计算哈希码c:
如果字段f为boolean:计算(f ? 0 : 1);
(f ? 0 : 1)
byte
(int)f
long
(int)(f ^ (f >>> 32))
float
Float.floatToIntBits(f)
double
Double.doubleToLongBits(f)
c
result
result = 37 * result + c