就像Helper所写的那样,以防万一关键对象的现有哈希函数出现故障,并且不能很好地混合低位比特。根据pgras引用的消息来源,
static int indexFor(int h, int length) { return h & (length-1); }哈希以2的幂进行“与”运算(因此,
length-1保证为1的序列)。由于此ANDing,仅使用的低位
h。的其余部分将
h被忽略。想象一下,无论出于何种原因,原始哈希仅返回可被2整除的数字。如果直接使用它,则永远不会使用哈希图的奇数位置,从而导致冲突次数增加2倍。在真正的病理情况下,错误的哈希函数会使哈希表的行为更像列表而不是O(1)容器。
Sun工程师必须进行运行测试,这些测试表明太多的哈希函数在其低位中不够随机,并且许多哈希图的大小不足以使用高位。在这种情况下,
hash(inth)即使需要额外的计算,HashMap中的位操作也可以在大多数预期用例上提供净改进(由于较低的冲突率)。



