javastaticintindexFor(inth,intlength){//assertInteger.bitCount(length)==1:"lengthmustbeanon-zeropowerof2";returnh&(length-1);}这是hashmap源码的一个函数,作用是将hashcode对应到hashmap数组里面的下标。`h&(length-1)`是什么运算呢?这样能保证下标是唯一的吗?
2 回答
呼如林
TA贡献1798条经验 获得超3个赞
h&(length-1)等价于h%length&是按位与,需要注意的是这里面length的值一定是2的幂举例,length=4那么,(length-1)的二进制表示是00000011,00000011和任意数字进行&操作,等价于以00000100为除数的取余操作
POPMUISE
TA贡献1765条经验 获得超5个赞
这个方法非常巧妙,它通过h&(table.length-1)来得到该对象的保存位,而HashMap底层数组的长度总是2的n次方,这是HashMap在速度上的优化。在HashMap构造器中有如下代码:见一个非常巧妙的hashcode算法returnh&(length-1);
添加回答
举报
0/150
提交
取消