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