key的hash & (数组length - 1)
,由于length
是2^n
,转换成二进制后2^-1
最低位就全部都是1
,比如111
,就相当于是数组长度的掩码,那么hash & 111
就可以将数组的每一位都覆盖,加入数组长度不是2^n
,那么length-1
低位不全是1
,比如101
,那么hash & 101
就会出现数组有的位置永远都不会有值。key的hash & (数组length - 1)
,由于length
是2^n
,转换成二进制后2^-1
最低位就全部都是1
,比如111
,就相当于是数组长度的掩码,那么hash & 111
就可以将数组的每一位都覆盖,加入数组长度不是2^n
,那么length-1
低位不全是1
,比如101
,那么hash & 101
就会出现数组有的位置永远都不会有值。