HashMap中的碰撞解决方案

时间:2012-12-07 06:38:24

标签: java hashmap hashcode

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

更新

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

2 个答案:

答案 0 :(得分:9)

如果要从hashmap中检索某个对象并且存在多个具有相同哈希码的对象,java将调用equals()来确定正确的对象。

这就是为什么在覆盖equals()时覆盖hashCode()非常重要。

答案 1 :(得分:3)

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

具有许多冲突的hashCode()或具有太少桶的HashMap可以使一些链表长。良好的性能取决于短链接列表,因为查找的最后阶段是对其中一个链接列表的线性扫描。

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