我不认为这种方法可以避免碰撞。我认为如果key.hashcode大于table.length,就会发生冲突。
\n\n更新\xef\xbc\x9a\n实际上我参考了HashMap#hashJDK 1.8 中的 ,并且对向下扩展高位的好处有点困惑。\n现在,我想在这个链接的帮助下我已经清楚了,好处是:
对于冲突来说,如果key的数量大于表的长度,那么无论使用什么哈希方法都会发生冲突。
\n假设您天真地使用以下方法对哈希表进行索引
int index = hashcode % table.length;
Run Code Online (Sandbox Code Playgroud)
在某些常见用例中,这可能会导致许多冲突。例如,假设 table.length 是 2 的小幂(如 32 或 64)。在这种情况下,只有哈希码的低位才能确定索引。如果对象的哈希码仅高位不同,这将导致大量冲突。位移位允许哈希码的高位也影响计算的索引。