(以下內容均來自上述課程)
1. HashMap(一)
底層:數組+鏈表+紅黑樹
1.1 前提準備
查看源碼:選中HashMap–ctrl+B
小細節:快捷鍵ctrl+f12–跳出目錄結構
- 藍色圓圈:class 證明是類名
- 粉色圓圈: method 證明是方法
- 方法名和類名相同就證明是構造方法
- 方法名和類名不相同就證明是普通的成員方法
- 組成:粉色圓圈+方法名+括號內形參+:后返回值+灰色箭頭
- 灰色箭頭:??:重寫父類或者接口中的方法 + 父類或接口的名稱
- 灰色箭頭:??:如果方法本身就是灰色就會出現右箭頭,表示直接繼承箭頭后面的方法,會直接跳轉到后面的方法
- 黃色圓圈:field 表示類的屬性:成員變量或者常量
- 綠色圓圈:interface 表示接口
- 再往下的藍色圓圈:大類(HashMap)中的內部類
1.2 Node節點—>鏈表
1.3 TreeNode---->紅黑樹
1.4 table---->數組
里面裝的元素就是Node的對象
數組長度:默認16
加載因子:默認0.75
1.5 構造方法
1.5.1 空參構造–>加載因子0.75
此時底層數組還沒有創建,
添加元素時,數組才會被創建。
形參:哈希值,鍵,值,當前數據是否保留(false是覆蓋不保留),不重要
2. HashMap(二)
數組內部的鍵值對對象分為兩種情況:鏈表或者紅黑樹
2.1 添加對象
2.1.1 put方法(添加元素)源碼
牽連到下述:
2.1.2 哈希值
2.1.3 putVal方法源碼
變量:
語句:
變量:
(1) 添加第一個元素的過程:數組位置為null
(2) 添加其他的元素
(2.1) 數組的位置不為null,鍵不重復,掛在下面形成鏈表或者紅黑樹
(2.2)數組的位置不為null,鍵重復,元素覆蓋
444被覆蓋為555,只修改了數據