从java HashMap的源码中可以清楚的看出,当达到空间阈值时,它的空间扩大了两次。
我想到了一个用例,其中所有 6 个元素以链接方式存储在同一索引下。当第 7 个元素到达时,阈值为 7(10*.75) 的 HashMap(size 10) 得到扩展。这里实际上不需要扩展,因为所有都保存在一个索引下。
请赐教
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);
}
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 * loadFactor);
}