为什么哈希表的容量一定要是 2的整数次幂?

首先,capacity 为 2的整数次幂的话,计算桶的位置 h&(length-1) 就相当于对 length 取模,提升了计算效率;

其次,capacity 为 2 的整数次幂的话,为偶数,这样 capacity-1 为奇数,奇数的最后一位是 1,这样便保证了 h&(capacity-1) 的最后一位可能为 0,也可能为 1(这取决于h的值),即与后的结果可能为偶数,也可能为奇数,这样便可以保证散列的均匀性;

而如果 capacity 为奇数的话,很明显 capacity-1 为偶数,它的最后一位是 0,这样 h&(capacity-1) 的最后一位肯定为 0,即只能为偶数,这样任何 hash 值都只会被散列到数组的偶数下标位置上,这便浪费了近一半的空间。

摘自: https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/HashMap%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90.md

因此,哈希表容量取 2 的整数次幂,有以下 2 点好处:

使用减法替代取模,提升计算效率;
为了使不同 hash 值发生碰撞的概率更小,尽可能促使元素在哈希表中均匀地散列。
---------------------
作者:拭心
来源:CSDN
原文:https://blog.csdn.net/u011240877/article/details/53351188
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-07-02 17:02  开顺  阅读(896)  评论(0编辑  收藏  举报