HashMap什么时候进行扩容---如何扩容呢?

书欣 Java每日一问 发布时间:2022-09-28 22:36:38 阅读数:18412 1
下文笔者讲述HashMap(jdk1.7)中HashMap扩容的触发点及扩容的操作方法分享,如下所示

jdk1.7扩容的源码分析

//JDK1.7扩容最核心的方法,newTable为新容量数组大小
void transfer(HashMapEntry[] newTable) {
 
   //新容量数组桶大小为旧的table的2倍
   int newCapacity = newTable.length;
 
   //遍历旧的数组桶table
   for (HashMapEntry<K,V> e : table) {

       //如果这个数组位置上有元素且存在哈希冲突的链表结构则继续遍历链
       while(null != e) {
        
           //取当前数组索引位上单向链表的下一个元素
           HashMapEntry<K,V> next = e.next;
 
           //重新依据hash值计算元素在扩容后数组中的索引位置
           int i = indexFor(e.hash, newCapacity);
 
           //将数组i的元素赋值给当前链表元素的下一个节点
           e.next = newTable[i];
 
           //将链表元素放入数组位置
           newTable[i] = e;
 
           //将当前数组索引位上单向链表的下一个元素赋值给e进行新的一圈链表遍历
           e = next;
 
       }
   } 
}

HashMap扩容的触发点

当哈希表中Entry数量超过loadFactor加载因子乘以当前table 数组桶长度时
  就会触发扩容操作

HashMap扩容操作步骤

  1.新建大小为扩容后大小的新数组;
  2.取出数组元素
     然后遍历以该元素为头的单向链表元素
     依据每个被遍历元素的hash值计算其在新数组中的下标然后进行交换即可
  
  注意事项:
     扩容后,
	 原来hash冲突的单向链表尾部会变成扩容后单向链表头部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202209/4538.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者