猿问

大佬们遇到过这个问题吗?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;
}
MYYA
浏览 304回答 2
2回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答