問題:在閱讀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;}
大佬們遇到過這個問題嗎?WeakHashMap在哪里把hash沖突的節點鏈到鏈表上的?求指導!
MYYA
2019-06-09 09:40:49
