标签:put factor src 没有 元素 for length city code
key值为空的情况: 3.扩容首先要判断老的Map的长度是否大于等于最大的长度(1<<30,左移30位)
如果大于等于 ,threshold(判断是否扩容的条件即table.size>threshold),扩容位之前的两倍(threshold=DEFAULT_INITAL_CAPACITYDEFAULT_LOAD_FACTOR )=>160.75;如果到达最大容量,threshold=MAX_VALUE;如果没有超过则将长度扩大为之前的两倍,创建新的Entry数组,将新的数据transfer到新的Entry数组中,再将新的Entry数组赋值给老的Entry数组,此时将threshold=扩容后的Entry数组的长度* 加载因子
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);
}
4.transfer 将原数组中的数据传输到新的数组中
遍历 Entry 数组,遍历每个列下面的链表
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry<K,V> e = src[j];
if (e != null) {
src[j] = null;
do {
Entry<K,V> next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
标签:put factor src 没有 元素 for length city code
原文地址:http://blog.51cto.com/13919712/2164882