1.有两个构造函数可以指定初始容量大小
2.实际计算容量大小的函数tableSizeFor
3."|" 二进制数值求或 ">>>" 二进制数值无符号右移
4.tableSizeFor方法中这一系列计算转换成数学问题即:"给定一个正整数cap,函数f(x) = 2^x,x为正整数,求f(x) >= cap时f(x)的最小值"
int类型在java中占4个字节,32位
假设cap二进制最高位1为32个bit位中的第n位(右往左数)
则其与本身无符号右移一位得到的二进制异或则得到的之第n,n-1位均为1
再无符号右移两位得到的二进制异或则得到的之第n,n-1,n-2,n-3位均为1
第m次做运算则n,n-1,....,(n-2^m)+1 位均为1 ((n-2^m)+1 >=1)
当n<32时,只要m>=5时,即可使得第n,n-1,....,1为位均位1
即.....000111..... 再加1
得.....001000....转换成十进制位2^(n+1)
5.举例计算 cap = 11 二进制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
转换成十进制2^5=16