目录
1.扩容形成环路
在put元素超过负载阈值时会触发HashMap的扩容resize操作,一个桶的链表会重新散列到新表中,
/**
* put 插入元素之后,负载超过阈值,触发resize方法扩容
*/
void addEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
/**
* resize(),transfer把旧表中的元素添加到新表中
*/
void resize(int newCapacity) {
Entry[] oldTable = table;
int oldCapacity = oldTable.length;
if (oldCapacity == MAXIMUM_CAPACITY) {
threshold = Integer.MAX_VALUE;
return;
}
Entry[] newTable = new Entry[newCapacity]; // 创建新表
transfer(newTable);
table = newTable;
threshold = (int)(newCapacity *