- 计算对象的hashCode()
- 再进行调用hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀
- 最后(capacity -1 ) & hash 得到索引
这里的位与运算实际上是替代取模运算,因为在性能上位与运算更优,但替代的前提条件必须是2的n次幂,否则计算出来的数值就不相等了。
97 % 16 // 等于1
(16 -1) & 97 // 等于1
// 但如果不是2的n次幂,则不同
97 % 15 // 等于7
(15 -1) & 97 //等于0
之所以出现这样,是因为16 是2的n次幂,而15就不是,这就验证了上面讲到的。