容器總體結構
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沖突”