HashMap的长度为什么一定要是2的幂次方
运算效率
首先是运算效率,我们都知道计算机是以二进制存储的。与运算符(&)是计算机中的一个基本的逻辑运算方式,它的运算方式是只能两者都为1的时候才等于1,否则等于0。
0&0=0;
0&1=0;
1&0=0;
1&1=1;//两者同时为1,结果为1,否则为0
我们刚好可以利用这个性质来进行取模运算。相对于传统的取模运算,&与运算符的效率要快的多
666%len
666&(len-1) //&与运算符的效率要快的多
但是想用&与运算符进行计算的前提必须是为2的幂次方
//例如
//假设我们模长为4转换为二进制之后变成了 100 之后对模长进行减1就会变成011我
们可以看到最高位变成了1其余位置变成了0,
len=4 --> 100 --> len-1 --> 011
//正是利用这二的幂次方减一的这一特性,使的结果与传统取余操作等价
6&(len-1)
110
& 011
___________
010 <-----余数为2
6%len=2 <-----余数为2
我们从源码中也可以验证到这一点
散列性
第