被面試官狂問HashMap:回家直接肝了這套HashMap底層原理源碼教程,受益

看完啦,收獲很大!
這是筆記:
HashMap底層原理:
數(shù)組+鏈表(數(shù)組指向鏈表頭結(jié)點(diǎn))
頭插法:新put的節(jié)點(diǎn)從頭部插入
新節(jié)點(diǎn).next = 頭節(jié)點(diǎn)
頭節(jié)點(diǎn) = 新節(jié)點(diǎn)
HashMap的put:
計(jì)算key的hash值
先將hash值進(jìn)行擾動(dòng)(移動(dòng)位)
接著計(jì)算出最小2次冪(如10為16)
然后把計(jì)算出的結(jié)果和key擾動(dòng)過的hash值進(jìn)行位于&運(yùn)算,最后得出要插入的index位
若index位上節(jié)點(diǎn)不為null,則遍歷判斷是否有重復(fù)key,有的話覆蓋value值,返回原value(對應(yīng)視頻開頭的2)
擴(kuò)容機(jī)制:
新建一個(gè)Entry數(shù)組,容量是原來size*2,接著調(diào)用transfer方法進(jìn)行轉(zhuǎn)移
轉(zhuǎn)移原數(shù)組的節(jié)點(diǎn)該放在新數(shù)組哪個(gè)位置:通過計(jì)算可以得出放在原來位置或者*2位,原數(shù)組從頭開始遍歷轉(zhuǎn)移(1:1、2:2、3:3)轉(zhuǎn)移到新數(shù)組變成(3:3、2:2、1:1)

標(biāo)簽: