1.有兩個(gè)構(gòu)造函數(shù)可以指定初始容量大小
2.實(shí)際計(jì)算容量大小的函數(shù)tableSizeFor
3."|" 二進(jìn)制數(shù)值求或? ? ?">>>"? 二進(jìn)制數(shù)值無符號(hào)右移
4.tableSizeFor方法中這一系列計(jì)算轉(zhuǎn)換成數(shù)學(xué)問題即:"給定一個(gè)正整數(shù)cap,函數(shù)f(x) = 2^x,x為正整數(shù),求f(x) >= cap時(shí)f(x)的最小值"
int類型在java中占4個(gè)字節(jié),32位
假設(shè)cap二進(jìn)制最高位1為32個(gè)bit位中的第n位(右往左數(shù))
則其與本身無符號(hào)右移一位得到的二進(jìn)制異或則得到的之第n,n-1位均為1
再無符號(hào)右移兩位得到的二進(jìn)制異或則得到的之第n,n-1,n-2,n-3位均為1
第m次做運(yùn)算則n,n-1,....,(n-2^m)+1 位均為1? ((n-2^m)+1 >=1)
當(dāng)n<32時(shí),只要m>=5時(shí),即可使得第n,n-1,....,1為位均位1
即.....000111..... 再加1
得.....001000....轉(zhuǎn)換成十進(jìn)制位2^(n+1)
5.舉例計(jì)算 cap = 11? ?二進(jìn)制00000000?00000000?00000000 00001011
00000000?00000000?00000000 00001011? 右移一位
00000000?00000000?00000000 00000101
異或
00000000?00000000?00000000 00001111
..........
最后得到00000000?00000000?00000000 00001111,
加1得到? 00000000?00000000?00000000 00010000
轉(zhuǎn)換成十進(jìn)制2^5=16