Java的HashMap鍵值對存儲結構解析


容器總體結構

 Map存儲鍵值對的數據結構是“數組+鏈表”的結構,結合了數組查詢數據快和鏈表增刪數據快的優點;用Entry[]存儲鍵值對,Entry為類類型,類里面有四個屬性:hash、K、V、next,分別存儲哈希值、鍵對象、值對象、下一個Entry對象引用。

Entry底層源碼

Entry對象存儲結構圖

Entry數組存儲結構圖

HashMap存儲數據過程示意圖

我們的目的是將”key-value兩個對象”成對存放到HashMap的Entry[]數組中。參見以下步驟:

      (1) 獲得key對象的hashcode

           首先調用key對象的hashcode()方法,獲得hashcode。

      (2) 根據hashcode計算出hash值(要求在[0, 數組長度-1]區間)

           hashcode是一個整數,我們需要將它轉化成[0, 數組長度-1]的范圍。我們要求轉化后的hash值盡量均勻地分布在[0,數組長度-1]這個區間,減少“hash沖突”


免責聲明!

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



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