计算Entry对象保存在 table中的数组索引值
static int indexFor(int h, int length) {
return h & (length-1);
}
它没有对hash表的长度取余而使用了位运算来得到索引.
原因分析:
HashMap的初始容量和扩容都是以2的次方来进行的,那么length-1换算成二进制的话肯定所有位都为1,就比如2的4次方为8,length-1的二进制表示就是1111, 而按位与计算的原则是两位同时为“1”,结果才为“1”,否则为“0”。所以h& (length-1)运算从数值上来讲其实等价于h%length,但是位运算快于十进制运算