我不认为这种方法可以避免碰撞。我认为如果key.hashcode大于table.length,就会发生冲突。
更新:
其实我指的是HashMap#hash
在 JDK 1.8 中,我对向下扩展高位的好处感到有点困惑。
现在,我想在这个的帮助下我很清楚了link,好处是:
- 我们不需要进行%计算,而是使用更快速的方式——位移位。
对于冲突来说,如果key的数量大于表的长度,那么无论使用什么哈希方法都会发生冲突。
假设您天真地使用以下方法对哈希表进行索引
int index = hashcode % table.length;
在某些常见用例中,这可能会导致许多冲突。例如,假设 table.length 是 2 的小幂(如 32 或 64)。在这种情况下,只有哈希码的低位才能确定索引。如果对象的哈希码仅高位不同,这将导致大量冲突。位移位允许哈希码的高位也影响计算的索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)