1

我阅读了几个论坛,但我仍然无法理解如何hashCode()计算以及何时计算?!我读到HashMaphashCode()是这样调用的:hash(key.hashCode());并且HashTable它是用密钥和对计算的:h += e.key.hashCode() ^ e.value.hashCode();HashMap它们在和中的计算方式不同HashTable吗?

do什么时候hashCode()被调用?我认为当您尝试执行时会发生这种情况put(..)get(..)或者delete(..)

4

2 回答 2

2

将项目放入地图时调用的hashCode()key

public V put(K key, V value) {
...
int hash = hash(key.hashCode());
...
}

以便key, value and hash code可以将具有指定的新条目添加到指定的存储桶中。

当您尝试valuemap给定的对象中检索 akey以查找具有所需 的存储桶时,也会调用它Entry。同样,如果您调用containsKey来检查给定的键是否存在于 中map,它会用于hashCode查找bucket包含Entry.

于 2013-10-29T12:32:35.527 回答
1

你可能会混淆hashCode这里的两种完全不同的用法,它们都存在于HashMapHashtable中。

第一个,像putand之类的方法get,是计算一​​个键的哈希值,以在条目表中找到一个条目。这就是hash(key.hashCode())正在做的事情。

第二个是在 or 本身的方法内部正在hashCode为整个对象计算单个散列。这使用表中每个键和值的散列 - 这就是正在做的事情。HashMapHashtableh += e.key.hashCode() ^ e.value.hashCode()

于 2013-10-29T12:30:53.450 回答