HashMap在jdk1 8前後的變化

2021-10-04 14:48:10 字數 322 閱讀 1098

hashmap在jdk1.8之前結構為陣列+鍊錶,缺點就是雜湊函式很難使元素百分百的均勻分布,這會產生一種極端的可能,就是大量的元素存在乙個桶裡,此時的時間複雜度為o(n),極大的放慢了計算速率。

在jdk1.8之後,hashmap採用陣列加鍊表或是紅黑樹的形式,

1、在hashmap新增元素時,按照陣列+鍊錶形式新增,當桶中的數量大於8時,鍊錶會轉換成紅黑樹的形式。

2、刪除元素、擴容時,同上,數量大於8時,也是採用紅黑樹形式存貯,但是在數量較少時,即數量小於6時,會將紅黑樹轉換回鍊錶。

3、遍歷、查詢時,使用紅黑樹,他的時間複雜度o(log n),便於效能的提高。

hashmap底層 jdk1 8前後的改變

將hashmap和currenthashmap放一塊進行比較,是因為二者的結構相差不多,只不過後者是執行緒安全的。首先說hashmap,在jdk1.8之前,hashmap的儲存結構是陣列 鍊錶的形式,可以理解為元素為鍊錶的陣列,當新增乙個kv對,首先計算key的雜湊值,用雜湊值對陣列長度按位與,以此...

HashMap 底層 原理(JDK 1 8)

原來看過1.7的hashmap底層,1.8更新後也稍微看了一下,沒有進行仔細的總結,今天總結一下1.8底層的原理。本文只討論1.8的底層原理。以下全文為1.8版本的 對於hashmap的資料結構,是老生常談了,面試的時候經常會被問道。底層資料結構為陣列 鍊錶 紅黑樹,儲存的是node節點,紅黑樹是t...

HashMap原始碼分析 JDK1 8

陣列 鍊錶 紅黑樹 陣列儲存元素,當有衝突時,就在該陣列位置形成乙個鍊錶,儲存衝突的元素,當鍊表元素個數大於閾值時,鍊錶就轉換為紅黑樹。transient node table transient int size int threshold final float loadfactor 預設初始容...