5

当我们将键值对放入 HashMap 时,可能会发生两个键的哈希码相同的情况,那么在这种情况下如何处理键值的存储和检索。

更新

到目前为止我的理解是,如果两个对象键具有相同的哈希码,那么两个键对象都将存储在同一个存储桶中,当我要说get(key)的时候,在两个具有匹配哈希码的对象中,要获取的元素由object.equals().

4

2 回答 2

9

当您想从 hashmap 中检索某个对象并且存在多个具有相同 hashcode 的对象时,java 将调用equals()以确定正确的对象。

这就是为什么在覆盖equals()时覆盖如此重要的原因hashCode()

于 2012-12-07T06:41:21.530 回答
3

每个桶由一个链表表示,因此除了堆空间之外,桶中的条目数没有限制。桶比可能的 hashCode 结果少,因此多个哈希码映射到同一个桶,而不仅仅是具有相同 hashCode 的键。

hashCode()很多冲突的 HashMap 或者桶太少的 HashMap 会使一些链表变长。良好的性能取决于短链表,因为查找的最后阶段是对其中一个链表进行线性扫描。

我同意前面的答案,即匹配取决于equals()hashCode()

于 2012-12-07T09:11:33.537 回答