這個方法在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码进行与运算的出来放的数组位置,他会去看这个位置有没有元素

如果不是null那就只能链表操作了,那个操作等会说
if(++size>threshold)resize();afterNodeInsertion(evict);returnnull;
之后呢,我们要变更size的大小,因为size是记录有多少个真正的元素在这个数组中,threshold就是临界值,我们初始化好了,这个值就是12,这个if呢就是为了判断,你添加到数组的元素,你不能大于这个临界值,那你要是大于了,那我就去扩容去了,否则了那就没事了
afterNodeInsertion(evict);
afterNodeInsertion(evict);
这玩意是为了LinkedHashMap服务的,是为了保证顺序而存在的,在hashmap中没意义。
本文来源:独立服务器--HashMap添加源码分析(hashmap源码分析和实现)
本文地址:https://www.idcbaba.com/duli/2194.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。