源码中(tab.length-1)&hash的意义?
1.保证数组不会越界:
因为tab的数组一定是2的幂,所以tab.length-1的二进制一定是(0000 0111)这种0后面一排1的格式,(&运算:都为1时才是1)结果所得到的下标一定在数组范围。
2.保证元素尽可能的均匀分布,减少hash冲突,提高效率:
因为tab数组的长度是偶数,(tab.length-1)是奇数,二进制是0000 1111这样格式。一个hash值为8,一个hash值为9的二进制分别为1000,1001。&运算的结果是1000,1001。但是假设数组长度是奇数,(tab.length-1)是偶数。那么最低位一定是0,hash值为14的二进制是1110,分为与上两个数做&运算后得到的结果都是1000。