为什么Java使用(hash &0x7FFFFFFF)% tab.length来决定键的索引?
从下面的链接中,我知道Java用于决定将{键,值}放入数组的哪个插槽中。(hash & 0x7FFFFFFF) % tab.length
我的问题是,为什么Java首先做哈希和0x7FFFFFFF?有什么特别的目的吗?
从下面的链接中,我知道Java用于决定将{键,值}放入数组的哪个插槽中。(hash & 0x7FFFFFFF) % tab.length
我的问题是,为什么Java首先做哈希和0x7FFFFFFF?有什么特别的目的吗?
因为:
0x7FFFFFFF
是 0111 1111 1111 1111 1111 1111 1111 1111 1111:除符号位外的所有 1。
(hash & 0x7FFFFFFF)
将生成正整数。
(hash & 0x7FFFFFFF) % tab.length
将在选项卡长度的范围内。
因为您肯定不希望将其索引到数组中。强制符号位为 0 可避免此问题。-1 % 10 == -1