当我们在HashMap中放置键值对时,可能会发生两个键的哈希码可能相同,然后在这种情况下如何处理键值的存储和检索。
更新
到目前为止我所理解的是,如果两个对象键具有相同的哈希码,那么两个键对象将存储在同一个桶中,当我说get(key)
然后用两个具有匹配哈希码的对象时,要获取哪个元素由object.equals()
决定。
答案 0 :(得分:9)
如果要从hashmap中检索某个对象并且存在多个具有相同哈希码的对象,java将调用equals()
来确定正确的对象。
这就是为什么在覆盖equals()
时覆盖hashCode()
非常重要。
答案 1 :(得分:3)
每个存储桶由链表表示,因此除了堆空间之外,存储桶中的条目数没有限制。桶的数量少于可能的hashCode结果,因此多个哈希码被映射到同一个桶,而不仅仅是具有相同hashCode的密钥。
具有许多冲突的hashCode()
或具有太少桶的HashMap可以使一些链表长。良好的性能取决于短链接列表,因为查找的最后阶段是对其中一个链接列表的线性扫描。
我同意之前的回答,即匹配取决于equals()
和hashCode()
。