HashMap中add 方法的原始碼學習

2022-06-20 19:36:08 字數 896 閱讀 6548

hashmap中實際是維護了乙個node陣列,用來儲存資料,下面看一下node原始碼:

static

class nodeimplements map.entry

簡單介紹一下node中的屬性:

1:hash值

2:key-鍵

3:value-值

分析一波add()原始碼,上**:

//

hash值和元素的hashcode()方法相關

final v putval(int hash, k key, v value, boolean

onlyifabsent,

boolean

evict)

//如果hash值相同,equals也返回true,則表示為相同物件,直接e = p.next覆蓋

//如果hash值相同,equals不同,則判定為不一樣的物件,則追加新節點到尾部

if (e.hash == hash &&((k = e.key) == key || (key != null &&key.equals(k))))

break

;

//迴圈替換迭代

p =e;}}

//如果e不是null,說明有需要覆蓋的節點

if (e != null)

}++modcount;

//如果新增乙個元素後,大小超過了 容量 * 負載因子,則需要擴容

if (++size >threshold)

resize();

//空方法,沒實現

afternodeinsertion(evict);

return

null

; }

HashMap中add 方法的原始碼學習

hashmap add hash值和元素的hashcode 方法相關 final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 如果找到了要覆蓋的節點 if e.hash hash k e.key key key...

HashMap的resize 即擴容方法原始碼分析

直接上 final node resize elseif newcap oldcap 1 maximum capacity oldcap default initial capacity 若舊陣列容量小於最大容量且新陣列容量擴大至舊陣列容量的2倍後依舊小於最大容量,並且舊陣列容量大於等於預設的初始化...

HashMap 的 get 方法的流程分析(原始碼)

流程首先根據 hash 方法獲取到 key 的 hash 值 然後通過 hash length 1 的方式獲取到 key 所對應的node陣列下標 length對應陣列長度 首先判斷此結點是否為空,是否就是要找的值,是則返回空,否則進入第二個結點。接著判斷第二個結點是否為空,是則返回空,不是則判斷此...