HashMap添加源码分析(hashmap源码分析和实现)

HashMap添加源码分析(hashmap源码分析和实现)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-10-06 17:33:37
文章简介

這個方法在putval中執行,因為要確保你數組不是null resize就是重新计算容量;向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组

2025阿里云双十一服务器活动

這個方法在putval中執行,因為要確保你數組不是null

resize就是重新计算容量;向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素;当然java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组;就像我们用一个小桶装

finalVputVal(inthash,Kkey,Vvalue,booleanonlyIfAbsent,??booleanevict){Node<K,V>[]tab;Node<K,V>p;intn,i;if((tab=table)==null||(n=tab.length)==0)??n=(tab=resize()).length;if((p=tab[i=(n-1)&hash])==null)??tab[i]=newNode(hash,key,value,null);??~~~~~?++modCount;if(++size>threshold)??resize();afterNodeInsertion(evict);returnnull;??}

if((p=tab[i=(n-1)&hash)==null)

初始化完成后,他会去根据数组长度-1与计算的hash码进行与运算的出来放的数组位置,他会去看这个位置有没有元素

HashMap添加源码分析,hashmap源码分析和实现

如果不是null那就只能链表操作了,那个操作等会说

if(++size>threshold)resize();afterNodeInsertion(evict);returnnull;

之后呢,我们要变更size的大小,因为size是记录有多少个真正的元素在这个数组中,threshold就是临界值,我们初始化好了,这个值就是12,这个if呢就是为了判断,你添加到数组的元素,你不能大于这个临界值,那你要是大于了,那我就去扩容去了,否则了那就没事了

afterNodeInsertion(evict);

afterNodeInsertion(evict);

这玩意是为了LinkedHashMap服务的,是为了保证顺序而存在的,在hashmap中没意义。

标签:
移动云服务器能用多久不卡(移动云提供的服务有哪些)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!