集合之HashMap原理

2022-08-29 19:18:11 字數 513 閱讀 3020

hashmap:

底層是由陣列 + 鍊錶組成。

陣列是entry類陣列,entry中包含key、value、next。

陣列長度預設是16。

假設得到的是0,如果entry[0]該位置已有a,則將entry[0]賦值為後插入的b,然後將b的next指向原來的a。

隨著hashmap中值的逐步增多,entry會以一定的規則加長長度。

為什麼預設長度是16,且一般建立hashmap物件的時候,構建引數一般都是填的2的n次方。

另外在jdk1.8中,如果鍊錶的長度超過8,會自動將其轉換成紅黑樹。

hashmap預設的擴容因子是0.75,即hashmap中實際存放的內容超過 entry長度*0.75,那麼會自動進行擴容。

如果併發高的情況,我們一般不會使用hashtable,而是採用效率更高的concurrenthashmap。

concurrenthashmap在jdk1.8後沒有採用以前的segment(桶鎖),而是採用cas演算法(compareandswap)。

HashMap集合擴容原理

在 hashmap 中,提供了乙個指定初始容量的構造方法 hashmap int initialcapacity 這個方法最終會呼叫到 hashmap 另乙個構造方法,其中的引數 loadfactor 就是預設值 0.75f。public hashmap int initialcapacity,fl...

集合HashMap的底層原理

hashmap是基於雜湊表的map介面的集合,允許使用null值和null鍵,底層是陣列 鍊錶的資料結構,陣列是hashmap的主體,鍊錶是為了解決雜湊衝突而存在的。當鍊表長度大於閾值 8 時,鍊錶轉換為紅黑樹,這樣就減少了查詢時間。儲存put 呼叫雜湊函式計算出key對應的雜湊值 根據雜湊值得到k...

java 集合學習之hashMap

1 hashmap類繼承關係 public class hashmapextends abstractmap implements map,cloneable,serializable 存放示意圖 由此可以看出hash值一樣的節點會被存放在同一條鍊錶上,比原始遍歷equals查詢效率高 hash值相...