我看了几个论坛,但我仍然不明白 hashCode()
是如何计算的以及何时计算的?!我在 HashMap
中读到 hashCode()
是这样调用的:hash(key.hashCode());
和 HashTable
,它是用键和对计算的:h += e.key.hashCode() ^ e.value.hashCode();
。它们在 HashMap
和 HashTable
中的计算方式不同吗?
hashCode()
什么时候被调用?我假设当您尝试执行 put(..)
、get(..)
或 delete(..)
时会发生这种情况?
最佳答案
key
的 hashCode()
在您将项目放入 map 时被调用:
public V put(K key, V value) {
...
int hash = hash(key.hashCode());
...
}
以便可以将具有指定键、值和哈希码
的新条目添加到指定的桶中。
当您尝试根据给定的 key
从 map
中检索 value
以查找具有必需的 条目
。同样,如果您调用 containsKey
来检查给定的键是否存在于 map
中,它会使用 hashCode
来查找 bucket
包含 Entry
。
关于java - 在 HashMap 和 HashTable 中计算 hashCode 的工作方式是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19658003/