求大神解读一下这段源码

java  static int indexFor(int h, int length) {
        // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
        return h & (length-1);
    }
这是hashmap源码的一个函数,作用是将hashcode对应到hashmap数组里面的下标。`h & (length-1)`是什么运算呢?这样能保证下标是唯一的吗?
阅读 2.8k
2 个回答

h & (length - 1) 等价于 h % length

& 是按位与,需要注意的是这里面 length 的值一定是 2 的幂

举例,length = 4 那么,(length - 1) 的二进制表示是 00000011,00000011 和任意数字进行 & 操作,等价于以 00000100 为除数的取余操作

推荐问题