HashMap扩容以及ConcurrentHashMap扩容机制


HashMap扩容以及ConcurrentHashMap扩容机制

HashMap

1.7

在这里插入图片描述


void transfer(Entry[] newTable) {    
    // 1.7 的hashmap 数组+链表
    // 获取到旧表
    Entry[] src = table;
    // 获取到新表的长度(数组的长度)
    int newCapacity = newTable.length;    
    // 遍历旧表的每一条链表
    for (int j = 0; j < src.length; j++) { //遍历旧的Entry数组    
        Entry<K, V> e = src[j];             //取得旧Entry数组的每个元素    
        if (e != null) {   
            // 释放掉旧的Entry数组的对象引用
            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);    
        }    
    }    
}  

1.8

在这里插入图片描述

ConcurrentHashMap

1.7

1.8

在这里插入图片描述


文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录