HashMap 的初始容量为什么设置为16

首先,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 值发生碰撞的概率减小,这样就能是元素在哈希表中均匀分布

-----------本文结束感谢您的阅读-----------
0%