我很好地回答了我的问题 . 我正在研究HashMap我把两个值(7,"value test 1")(7,“值测试2”)根据规范java API HashMap put,第一个值被第二个值替换 .
我的问题是什么时候碰撞的解决方案?为什么我的第二个值不存储在linkedList中或存储在hashMap中的另一个位置?是由于equals还是hascode方法?
最好的祝福
我很好地回答了我的问题 . 我正在研究HashMap我把两个值(7,"value test 1")(7,“值测试2”)根据规范java API HashMap put,第一个值被第二个值替换 .
我的问题是什么时候碰撞的解决方案?为什么我的第二个值不存储在linkedList中或存储在hashMap中的另一个位置?是由于equals还是hascode方法?
最好的祝福
2 回答
如果两个不同的密钥解析为散列映射中的同一个桶,则会发生冲突处理 . 在这种情况下,第二个条目将被放入链表中 .
在您的情况下,您替换相同键(7)的条目,因此没有冲突 .
如果你需要一个包含每个键多个值的映射,请使用
Map<key, Set<value>>
(你也可以使用List
等而不是Set
)并自行处理添加/删除该集合或使用Apache Commons的MultiMap
或Google Guava的Multimap
,例如HashMultimap
.这与哈希冲突无关 . 哈希碰撞(即,具有相同
hashcode()
的键)由HashMap正确处理 . 在您的示例中,两个键都相等(即 . ,7.equals(7) == true
),因此旧值将被替换 .在以下示例中
你会在最后一行中发生什么?
也许你正在寻找一个多图?
Apache Commons
Guava
Stackoverflow