为了账号安全,请及时绑定邮箱和手机立即绑定

求大神解读一下这段源码

求大神解读一下这段源码

慕无忌1623718 2019-04-19 16:12:01
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为除数的取余操作
                            
查看完整回答
反对 回复 2019-04-19
?
POPMUISE

TA贡献1765条经验 获得超5个赞

这个方法非常巧妙,它通过h&(table.length-1)来得到该对象的保存位,而HashMap底层数组的长度总是2的n次方,这是HashMap在速度上的优化。在HashMap构造器中有如下代码:
见一个非常巧妙的hashcode算法returnh&(length-1);
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信