计算Entry对象保存在 table中的数组索引值

    1. static int indexFor(int h, int length) {
    2. return h & (length-1);
    3. }

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