hashMap中的位運算

HashMap中的位運算

1. 下標的計算

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

舉例

    tab.length = 8 ,  二進制 1000  
    tab.length-1 = 7  二進制 0111

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

    resize() = (oldCap & e.hash)

舉例,

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

    e.hash=1時。二進制 0001
    8的二進制 1000
    進行 & 運算 0 

    e.hash=2時。二進制 0010
    8的二進制 1000
    進行 & 運算 0 

    
    。。。。。。


    e.hash=8時,二進制 1000
    8的二進制 1000
    進行 & 運算 8

    e.hash=9時,二進制 1001
    8的二進制 1000
    進行 & 運算 8

    。。。。。。


    計算結果為0 時,下標位為低位,放在未擴容的鏈表區(qū)域
    計算結果不為0時,下標位為高位,放在擴容的鏈表區(qū)域

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

友情鏈接更多精彩內容