这是.HashMap
它提供了用于获取 bin 索引的代码:
private int getIndex(K key)
{
int hash = key.hashCode() % nodes.length;
if (hash < 0)
hash += nodes.length;
return hash;
}
为了确保散列值不大于表的大小,用户提供的散列函数的结果以表的长度为模。我们需要索引为非负数,但如果左操作数(哈希值)为负数,则取模运算符 (%) 将返回负数,因此我们必须对其进行测试并使其为非负数。
如果hash
结果是非常大的负值,hash += nodes.length
则循环中的加法可能需要大量处理。
我认为应该有O(1)
它的算法(与hash
价值无关)。
如果是这样,如何实现?