JDK 1.7 HashMap 扩容核心算法
下面这是JDK 1.7中HashMap扩容时调用的核心代码,作用是将原hash桶中的节点转移到新的hash桶中:
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry e = src[j];
if (e != null) {
src[j] = null;
do {
Entry next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
其中核心代码是下面这一段:
do {
//保留要转移指针的下一个节点
Entry next = e.next;
//计算出要转移节点在hash桶中的位置
int i = indexFor(e.hash, newCapacity);
//使用头插法将需要转移的节点插入到hash桶中原有的单链表中
e.next = newTable[i];
//将hash桶的指针