HashMap中的位運算
1. 下標的計算
`getIndex() = (tab.length-1 ) & hash `
舉例
tab.length = 8 , 二進制 1000
tab.length-1 = 7 二進制 0111
在計算 & 時, 只會比較 兩個二進制數 同時為1 則為1 , 即 getIndex() 方法 能夠最大得到的下標位 就是7。
一個二進制 0111 , 在與 另一個二進制值計算, 不管另一個值是多少 , 都能獲取一個 0-7的數字。 即求出下標位。
-
擴容的計算。
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ū)域