HashMap的底層原理


 

 

HashMap的底層原理:

JKD8.0中:

HashMap的底層儲存結構是數組+鏈表+紅黑樹。

當實例化一個 HashMap時,創建一個Node(在JDK7.0是entry,JDK8.0是Node,Node是entry的子類)數組(但是沒有創建數組的大小,當進行put操作時才會生成數組的長度),會初始化initialCapacity(初始的數組長度,默認大小為16)和loadFactor(裝載因子,默認大小為0.75),在put第一對映射關系 時,系統會創建一個長度為initialCapacity的Node數組,這個長度在哈希表 中被稱為容量(Capacity),在這個數組中可以存放元素的位置我們稱之為 “桶”(bucket),每個bucket都有自己的索引,系統可以根據索引快速的查 找bucket中的元素。

HashMap進行擴容和樹形化的時間:

數組擴容:

當HashMap中的Node個數個數超過threshold(threshold臨界點,是initialCapacity(初始長度)*loadFactor(裝載因子)。大小為12)時,進行擴容,Node數組擴大到原來的兩倍。

HashMap樹形化:

鏈表長度>=8 && 數組大小>=64,如果不滿足以上條件進行數組擴容。

當HashMap中的其中一個鏈的對象個數如果達到了8個,此時如果capacity沒有 達到64,那么HashMap會先擴容解決,如果已經達到了64,那么這個鏈會變成 樹,結點類型由Node變成TreeNode類型。當然,如果當映射關系被移除后, 下次resize方法時判斷樹的結點個數低於6個,也會把樹再轉為鏈表。

 圖片版:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM