我正在研究实施HashMap
在Java中,我陷入了困境。
怎么样indexFor
函数计算?
static int indexFor(int h, int length) {
return h & (length-1);
}
Thanks
哈希本身是通过以下方式计算的hashCode()
您尝试存储的对象的方法。
你在这里看到的是根据哈希计算存储对象的“桶”h
。理想情况下,为了避免碰撞,您将拥有与可实现的最大值相同数量的桶h
- 但这可能对内存要求太高。因此,您通常拥有较少数量的有碰撞危险的桶。
If h
比如说,1000,但你的底层数组中只有 512 个存储桶,你需要知道将对象放在哪里。通常,一个mod
操作于h
就足够了,但这太慢了。鉴于内部属性HashMap
底层数组always桶数等于2^n
,太阳的工程师可以使用这个想法h & (length-1)
,它做了一个按位与一个由所有组成的数字1
的,实际上只阅读n
哈希值的最低位(与执行相同h mod 2^n
, only much快点)。
Example:
hash h: 11 1110 1000 -- (1000 in decimal)
length l: 10 0000 0000 -- ( 512 in decimal)
(l-1): 01 1111 1111 -- ( 511 in decimal - it will always be all ONEs)
h AND (l-1): 01 1110 1000 -- ( 488 in decimal which is a result of 1000 mod 512)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)