HashMap中add 方法的原始碼學習

2021-10-05 14:51:52 字數 749 閱讀 8261

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 != null && key.equals(k))))

break;

p = e;}}

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

v oldvalue = e.value;

if (!onlyifabsent || oldvalue == null)

e.value = value;

// 空方法,沒實現,linkedhashmap的時候有用到

afternodeaccess(e);

return oldvalue;}}

++modcount;

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

if (++size > threshold)

resize();

// 空方法,沒實現

afternodeinsertion(evict);

return null;

}

HashMap中add 方法的原始碼學習

hashmap中實際是維護了乙個node陣列,用來儲存資料,下面看一下node原始碼 static class nodeimplements map.entry 簡單介紹一下node中的屬性 1 hash值 2 key 鍵 3 value 值 分析一波add 原始碼,上 hash值和元素的hashc...

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對應陣列長度 首先判斷此結點是否為空,是否就是要找的值,是則返回空,否則進入第二個結點。接著判斷第二個結點是否為空,是則返回空,不是則判斷此...