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

求大神解读一下这段源码

求大神解读一下这段源码

天涯尽头无女友 2019-04-21 20:21:25
javastaticintindexFor(inth,intlength){//assertInteger.bitCount(length)==1:"lengthmustbeanon-zeropowerof2";returnh&(length-1);}这是hashmap源码的一个函数,作用是将hashcode对应到hashmap数组里面的下标。`h&(length-1)`是什么运算呢?这样能保证下标是唯一的吗?
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

h&(length-1)等价于h%length
&是按位与,需要注意的是这里面length的值一定是2的幂
举例,length=4那么,(length-1)的二进制表示是00000011,00000011和任意数字进行&操作,等价于以00000100为除数的取余操作
                            
查看完整回答
反对 回复 2019-04-21
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

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

添加回答

举报

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