hashMap中的位運(yùn)算

HashMap中的位運(yùn)算

1. 下標(biāo)的計(jì)算

`getIndex() = (tab.length-1 ) & hash `

舉例

    tab.length = 8 ,  二進(jìn)制 1000  
    tab.length-1 = 7  二進(jìn)制 0111

    在計(jì)算 & 時(shí), 只會(huì)比較 兩個(gè)二進(jìn)制數(shù) 同時(shí)為1 則為1 , 即 getIndex() 方法 能夠最大得到的下標(biāo)位 就是7。 
    一個(gè)二進(jìn)制 0111  , 在與 另一個(gè)二進(jìn)制值計(jì)算, 不管另一個(gè)值是多少 , 都能獲取一個(gè)  0-7的數(shù)字。 即求出下標(biāo)位。
  1. 擴(kuò)容的計(jì)算。

    resize() = (oldCap & e.hash)

舉例,

    oldCap = 8 ,  e.hash = {0..100}

    e.hash=1時(shí)。二進(jìn)制 0001
    8的二進(jìn)制 1000
    進(jìn)行 & 運(yùn)算 0 

    e.hash=2時(shí)。二進(jìn)制 0010
    8的二進(jìn)制 1000
    進(jìn)行 & 運(yùn)算 0 

    
    。。。。。。


    e.hash=8時(shí),二進(jìn)制 1000
    8的二進(jìn)制 1000
    進(jìn)行 & 運(yùn)算 8

    e.hash=9時(shí),二進(jìn)制 1001
    8的二進(jìn)制 1000
    進(jìn)行 & 運(yùn)算 8

    。。。。。。


    計(jì)算結(jié)果為0 時(shí),下標(biāo)位為低位,放在未擴(kuò)容的鏈表區(qū)域
    計(jì)算結(jié)果不為0時(shí),下標(biāo)位為高位,放在擴(kuò)容的鏈表區(qū)域

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容