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 时,下标位为低位,放在未扩容的链表区域
计算结果不为0时,下标位为高位,放在扩容的链表区域