HashMap的数组长度为何必须是2的n次方
- 扩容方便,数字位移计算方便效率高;
- 计算元素下标使用的方式是
key的hash & (数组length - 1)
,由于length
是2^n
,转换成二进制后2^-1
最低位就全部都是1
,比如111
,就相当于是数组长度的掩码,那么hash & 111
就可以将数组的每一位都覆盖,加入数组长度不是2^n
,那么length-1
低位不全是1
,比如101
,那么hash & 101
就会出现数组有的位置永远都不会有值。 - 扩容的时候一条链表最多映射到两条链表上,计算效率高
- 2^n长度设计hash算法比较容易实现散列比较均匀