1.比较容易想到的一种计算下标的方法是取余运算;在hashMap中使用了更加高效的算法;
2.(n-1)&hash,其中n为数组的长度,hash是使用key通过Object中的hashCode()方法计算得到的hash值,与右移了16位的hashCode值异或运算得到的。并且n为之前使用tablesizefor得到的2的次方数;
于是精彩的地方就出现了,由于n为2的n次方的一个数,比如n = 16,于是n-1=15,转变为2进制后为:0000 1111,与上一个数(5),0000 0101,由于高位不做计算,所以只有低位做计算,结果为 0000 1001,这就意味着无论怎么计算,最后的结果一定是小于原先的数16(减小1的好处:保证低位的值全为1便于计算;保证之后的与运算结果小于原先的数),这就是与运算实现哪去制定数组下标的过程的方法;