HashMap扩容机制

扩容时机

当Map元素容量超过设定的阈值threshold=capacity * loadFactor时进行扩容,如下图所示:
HashMap扩容机制

JDK1.7扩容原理

原理:创建更大容量的新数组,重新计算每个元素在新数组中的位置进行迁移。
HashMap扩容机制
缺点:

  1. 每个元素需要重新计算hash;
  2. 链表中元素顺序每次迁移后被倒置;

JDK1.8扩容原理

  原理:在扩充HashMap的时候,不需要像JDK1.7的实现那样重新计算hash,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”,可以看看下图为16扩充为32的resize示意图:
HashMap扩容机制

HashMap扩容机制
优点:

  1. 不需要像JDK1.7的实现那样重新计算hash;
  2. 链表中元素顺序保持不变;

参考:http://blog.****.net/aichuanwendang/article/details/53317351