猿问

求大神解读一下这段源码

javastaticintindexFor(inth,intlength){
//assertInteger.bitCount(length)==1:"lengthmustbeanon-zeropowerof2";
returnh&(length-1);
}
这是hashmap源码的一个函数,作用是将hashcode对应到hashmap数组里面的下标。`h&(length-1)`是什么运算呢?这样能保证下标是唯一的吗?
慕无忌1623718
浏览 344回答 2
2回答

呼如林

h&(length-1)等价于h%length&是按位与,需要注意的是这里面length的值一定是2的幂举例,length=4那么,(length-1)的二进制表示是00000011,00000011和任意数字进行&操作,等价于以00000100为除数的取余操作

POPMUISE

这个方法非常巧妙,它通过h&(table.length-1)来得到该对象的保存位,而HashMap底层数组的长度总是2的n次方,这是HashMap在速度上的优化。在HashMap构造器中有如下代码:见一个非常巧妙的hashcode算法returnh&(length-1);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答