流程圖
流程
-
hash(key)
立由。對key.hashCode
高位與運(yùn)算
- 如果tab數(shù)組為空框仔,進(jìn)行
resize()
操作
- 計(jì)算tab索引位置是否有值机打;沒有值,直接插入瑟蜈;然后
++modCount
和++size
操作烟逊。在判斷 tab.size > threshold
,大于則resize()
铺根;結(jié)束
- 判斷hash是否相等 && 調(diào)用equal()判斷key是否相等宪躯;相同,則更新原值后調(diào)用
afterNodeAccess
位迂;結(jié)束
-
不相等访雪,如果是紅黑樹详瑞,則紅黑樹插入
- 如果是鏈表,則鏈表插入臣缀;插入后如果長度大于8坝橡,鏈表轉(zhuǎn)化為紅黑樹
- 插入后,再次判斷 key 是否相等精置;相等计寇,更新原值后調(diào)用
afterNodeAccess
;結(jié)束
-
不相等脂倦,則
++modCount
和++size
操作番宁。在判斷 tab.size > threshold
,大于則resize()
- 結(jié)束
偽代碼
if (tab數(shù)組為空) {
resize();
}
if (hash值對應(yīng)索引位置為空) {
鏈表插入;
} else {
if (key相等) {
// 結(jié)束if;
} else if (紅黑樹) {
紅黑樹插入;
} else {
鏈表插入;
長度大于8赖阻,轉(zhuǎn)化為紅黑樹;
}
if (key 相等) {
更新value;
afterNodeAccess();
return oldValue;
}
}
++modCount;
if (++size > threshold) {
resize();
}
afterNodeInsertion();
return null;
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者