最近在看HashMap源码时发现有一个indexFor方法,调用该方法来计算对象应该保存在 table 数组的哪个索引处。

static int indexFor(int h, int length) {  
    return h & (length-1);

}

我们看到他直接返回了两个参数的与运算,速度更快,因为位运算直接对内存数据进行操作,二进制,不需要转换成十进制操作,注意模数得是2的幂,而hashmap初始容量16符合并且以2的指数扩容,所以hashmap的hash计算效率更高一筹,下面是hashmap的扩容源码:

HashMap算法:x%y=x&(y-1)

newThr = odThr << 1 左位移运算,变为原来的两位。

下面是我的测试用例:

HashMap算法:x%y=x&(y-1)

测试结果是符合预期的。


相关文章: