最簡單的HashMap底層原理介紹

2022-05-01 20:24:09 字數 751 閱讀 6942

hashmap

底層原理

在jdk1.7中hashmap採用的是 陣列array 和 鍊錶link 這兩種資料結構,而在jdk1.8中對底層實現進行了優化,開始採用陣列鍊錶紅黑樹.

在1.7的基礎上對hash演算法進行了改進,並增加鍊錶儲存閾值為8.當鍊表長度大於8時,轉換為紅黑樹儲存

陣列長度為偶數2^n,因為硬體計算中位運算比取模2. 效率高,有利於hash均勻分布

常用string和integer作為key,這些類是immutable不可變類,可以保證執行緒安全.

多執行緒下hashmap不安全,擴容時會造成死鎖

concurrenthashmap如何解決執行緒安全

在jdk1.6中concurrenthashmap使用鎖分段技術提高併發訪問效率。首先將資料分成一段一段地儲存,然後給每一段資料配乙個鎖,當乙個執行緒占用鎖訪問其中一段資料時,其他段的資料也能被其他執行緒訪問。然而在jdk1.8中的實現已經拋棄了segment分段鎖機制,利用cas+synchronized來保證併發更新的安全,底層依然採用陣列+鍊錶+紅黑樹的儲存結構。

HashMap底層原理簡單剖析

1 hashmap的儲存結構 陣列 鍊錶 紅黑樹 jdk1.8 如下圖所示 2 hashmap的特點,如何實現 我們知道hashmap是一種可以快速儲存很快速查詢的鍵值容器,那麼jdk是如何實現hashmap的快速儲存和快速查詢呢?我們先從陣列和鍊錶以及二叉查詢樹這三種資料結構說起 1 陣列 陣列結...

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

HashMap底層原理

hashmap實現map介面,非執行緒安全的,區別於concurrenthashmap。允許使用null值和null鍵,不保證對映的順序.底層資料結構是乙個 陣列 鍊錶 紅黑樹 put 根據key計算得到key.hash h k.hashcode h 16 根據key.hash計算得到桶陣列的索引i...