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