問(wèn)題:在閱讀java8中WeakHashMap源碼時(shí),發(fā)現(xiàn)一個(gè)問(wèn)題,put操作在發(fā)生hash沖突時(shí),只有替換操作,但是沒(méi)有新增鏈表節(jié)點(diǎn)的操作,鏈表節(jié)點(diǎn)是什么時(shí)候鏈上去的?java8中的put源碼如下:publicVput(Kkey,Vvalue){Objectk=maskNull(key);inth=hash(k);Entry[]tab=getTable();inti=indexFor(h,tab.length);//這里只是在鏈表上找到key存在的節(jié)點(diǎn)做替換,但是對(duì)于key不存在的情況,//并沒(méi)有創(chuàng)建新的節(jié)點(diǎn)鏈到原來(lái)的鏈表后面。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;}//?????當(dāng)hash相同但是key不同不是應(yīng)該創(chuàng)建新節(jié)點(diǎn)鏈到鏈表上嗎?}modCount++;Entrye=tab[i];tab[i]=newEntry(k,value,queue,h,e);if(++size>=threshold)resize(tab.length*2);returnnull;}
WeakHashMap在哪里把hash沖突的節(jié)點(diǎn)鏈到鏈表上的?大佬們有什么好的建議?
Qyouu
2019-07-27 00:41:19