猿问

WeakHashMap在哪里把hash冲突的节点链到链表上的?大佬们有什么好的建议?

问题:在阅读java8中WeakHashMap源码时,发现一个问题,put操作在发生hash冲突时,只有替换操作,但是没有新增链表节点的操作,链表节点是什么时候链上去的?
java8中的put源码如下:
publicVput(Kkey,Vvalue){
Objectk=maskNull(key);
inth=hash(k);
Entry[]tab=getTable();
inti=indexFor(h,tab.length);
//这里只是在链表上找到key存在的节点做替换,但是对于key不存在的情况,
//并没有创建新的节点链到原来的链表后面。
for(Entrye=tab[i];e!=null;e=e.next){
if(h==e.hash&&eq(k,e.get())){
VoldValue=e.value;
if(value!=oldValue)
e.value=value;
returnoldValue;
}
//?????当hash相同但是key不同不是应该创建新节点链到链表上吗?
}
modCount++;
Entrye=tab[i];
tab[i]=newEntry<>(k,value,queue,h,e);
if(++size>=threshold)
resize(tab.length*2);
returnnull;
}
Qyouu
浏览 204回答 2
2回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答