JDK1 8 HashMap putVal原始碼解讀

2021-10-22 05:42:15 字數 920 閱讀 1374

final v putval(int hash, k key, v value, boolean onlyifabsent,

boolean evict)

// 該節點不為鍊錶最後乙個節點,判斷值是否相同,相同直接退出迴圈,因為此時e指向

// p.next 即p.next是相同節點,需要替換

if (e.hash == hash &&

((k = e.key) == key || (key != null && key.equals(k))))

break;

// 上述兩種情況都不滿足的情況下,p指向e,繼續迴圈

p = e;}}

// e不為空的情況下,說明存在相同元素 需要替換,並將替換前的節點值返回

v oldvalue = e.value;

if (!onlyifabsent || oldvalue == null)

e.value = value;

afternodeaccess(e);

return oldvalue;}}

// 操作次數+1 (modcount是用來記錄對hashmap變更的次數,用於多執行緒情況下對hashmap操作異常標

// 識符)

++modcount;

// threshold = capital*loadfactor 也就是hashmap擴容值 如果當前陣列擴大1超過該值,則進行

// 擴容操作

if (++size > threshold)

resize();

// 該方法在hashmap中是個空方法(實際是給linkedhashmap使用,因此忽略即可)

afternodeinsertion(evict);

return null;

}

參考文章:

jdk1 8常用總結

1.查詢集合裡的第乙個物件 filter 例 查詢listlist 中username為小明的物件t list.stream filter findfirst 1 list.stream filter e 小明 equals e.getusername findfirst 2.查詢滿足條件的物件,並...

用jdk1 8還是用jdk11

2020年年初,公司cto要求我們採用最新版本jdk,甚至直接使用最新版kotlin。前兩天 2020年12月 我把公司 公升級到了jdk11 lts版本,但不是最新版jdk。如果不搞rocketmq,不會發現什麼問題,而且會感覺這是乙個很好的改進,編碼寫法改進了,甚至效能提高了 然後,一搞rock...

Java 方法引用(JDK1 8)

引用 物件引用,物件引用的本質在於為乙個物件起別名,即 不同的棧記憶體可以同時指向同一塊堆記憶體空間。與物件引用類似的情況是,方法引用,即 為方法設定別名。在jdk 1.8之中針對於方法引用提供有如下的四種形式 引用靜態方法 類名稱 static方法名稱 引用某個物件的方法 例項化物件 普通方法 引...