1桃煎、hash(key)篮幢,取key的hashcode進(jìn)行高位運(yùn)算,返回hash值 (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
2为迈、如果hash數(shù)組為空三椿,直接resize()
3缺菌、對(duì)hash進(jìn)行取模運(yùn)算計(jì)算,得到key-value在數(shù)組中的存儲(chǔ)位置i
(1)如果table[i] == null搜锰,直接插入Node<key,value>
(2)如果table[i] != null伴郁,判斷是否為紅黑樹p instanceof TreeNode。
(3)如果是紅黑樹蛋叼,則判斷TreeNode是否已存在焊傅,如果存在則直接返回oldnode并更新;不存在則直接插入紅黑樹狈涮,++size狐胎,超出threshold容量就擴(kuò)容
(4)如果是鏈表,則判斷Node是否已存在薯嗤,如果存在則直接返回oldnode并更新顽爹;不存在則直接插入鏈表尾部,判斷鏈表長(zhǎng)度骆姐,如果大于8則轉(zhuǎn)為紅黑樹存儲(chǔ)镜粤,++size玻褪,超出threshold容量就擴(kuò)容