【常见集合篇15】HashMap-寻址算法

55 阅读1分钟

HashMap hash算法

image.png

HashMap 计算数组索引算法

image.png

为何HashMap的数组长度一定要是2的次幂

  • 计算索引时效率高:如果是2的n的次幂可以使用与位运算代替取模
  • 扩容时重新计算索引效率更高:hash & oldCap == 0 的元素留在原来的位置,否则新位置 = 旧位置 + oldCap

HashMap的寻址算法

  • 计算对象的hashCode()
  • 再进行调用hash方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更加均匀
  • 最后(capacity -1) & hash 得到索引