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