HashMap原始碼複習之putVal 方法

2021-10-04 13:17:23 字數 1034 閱讀 8335

putval()方法

//hash:key的hash值

//key:原始key

//value:要存放的值

//onlylfabsent:如果true代表不更改現有的值

//evict:如果為false表示table為建立狀態

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

boolean evict)

//條件成立的話,說明找到了相同key的node元素,需要進行替換操作

if (e.hash == hash &&

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

break;

//當雜湊衝突,且key不同時,相當於,在鍊錶最後加了乙個節點,此處,相當於將p向下移動到原來e的位置,然後返回上層邏輯,(e = p.next) == null成立,插入新節點

//說明新新增的元素和當前節點不相等,繼續查詢下乙個節點。用於遍歷桶中的鍊錶,與前面的e = p.next組合, 可以遍歷鍊錶

p = e;}}

//e不等於null,條件成立,說明,找到了乙個與你插入元素key完全一致的資料,需要進行替換

v oldvalue = e.value;

if (!onlyifabsent || oldvalue == null)

e.value = value;

afternodeaccess(e);

return oldvalue;}}

//modcount:表示雜湊表結構被修改的次數,替換node元素的value不計數

++modcount;

//插入新元素,size自增,如果自增厚的值大於擴容閾值,則觸發擴容

if (++size > threshold)

resize();

afternodeinsertion(evict);

return null;

}

複習HashMap原始碼增刪改查

hashmap 對key的hash運算 static final int hash object key 通過對key的異或運算 將高位與低位進行互換,從而減低了hash衝突,進而降低了系統損耗。public v put k key,v value 1.首先判斷hashmap是否經過初始化,如果沒有...

JDK原始碼之HashMap

部分重要屬性 存放key,value的陣列 transient node table 存放entry的set transient set entryset hashmap的大小 預設16 transient int size 修改次數 transient int modcount 擴擴容閾值capa...

原始碼分析之HashMap

首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...