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)位。
-
擴(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ū)域