首先,length 为 2 的整数次幂的话,h&(length-1) 就相当于对 length 取模,这样便保证了散列的均匀,同时也提升了效率;其次,length 为 2 的整数次幂的话,为偶数,这样 length-1 为奇数,奇数的最后一位为 1,这样便保证了 h&(length-1) 的最后一位可能为 0,也可能为1,即与后的结果可能为偶数也可能为奇数,这样便可以保证散列的均匀性,如果 length 为奇数,那么 length-1 则为偶数,偶数的最后一位为0,这样在进行与运算时,最后一位必然为 0。也就是说与运算后得到的全是偶数,这样 hash 后 entry 都会被分配到偶数位上,,这样便浪费了一半的空间。因此,length 取 2 的整数倍是为了使不同的 hash 值发生碰撞的概率减小,这样就能是元素在哈希表中均匀分布
HashMap 的初始容量为什么设置为16
-----------本文结束感谢您的阅读-----------
- 本文链接: https://c-or.github.io/2019/HashMap-的初始容量为什么设置为16.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!