簡單回顧下hashmap的資料結構,具體底層的資料結構目前理解的還不是很透徹,本篇只做為本人筆記,僅供參考,本人資料結構 基礎很弱,後續領悟透徹,繼續完善。
1.jdk8對HashMap 做了優化,
jdk7的結構是 陣列+連結串列,
jdk8 是陣列+連結串列+紅黑樹,
複製程式碼
jdk1.7 concurrenthashmap概述
1.寫操作時,通過鎖分段,提高效率,理想狀態下,可以支援16個執行緒執行併發寫操作,以及任意數量的讀操作。
複製程式碼
2.下圖是conurrenthashmap的結構:本質是一個segment陣列,總的來說,通過以下3個方面來保證高效性
.通過鎖分段保證併發環境下的寫操作
.通過HashEntry的不變性,volatile變數的記憶體可見性和加鎖重讀機制保證高效安全的讀操作
.通過不加鎖和加鎖兩種方案控制跨段操作的的安全性。
複製程式碼
3.concurrentHashMap分析
1.包含兩個核心靜態內部類 segment,HashEntry
2.segment 繼承 ReentrantLock ,充當鎖的角色,每個sgement物件守護每個雜湊對映表的若干個桶。
3.HashEntry用來封裝 K/V對。
4.每個桶是由若干個 HashEntry 物件連結起來的連結串列。
複製程式碼
jdk1.8 concurrentHashMap分析
1. 1.8的實現已經拋棄了Segment分段鎖機制,利用CAS+Synchronized來保證併發更新的安全,底層採用陣列+連結串列+紅黑樹的儲存結構
2. Z c 複製程式碼