HashMap hash算法
HashMap 计算数组索引算法
为何HashMap的数组长度一定要是2的次幂
- 计算索引时效率高:如果是2的n的次幂可以使用与位运算代替取模
- 扩容时重新计算索引效率更高:hash & oldCap == 0 的元素留在原来的位置,否则新位置 = 旧位置 + oldCap
HashMap的寻址算法
- 计算对象的hashCode()
- 再进行调用hash方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更加均匀
- 最后(capacity -1) & hash 得到索引