首页 文章

java hashMap <Integer,String> collision

提问于
浏览
0

我很好地回答了我的问题 . 我正在研究HashMap我把两个值(7,"value test 1")(7,“值测试2”)根据规范java API HashMap put,第一个值被第二个值替换 .

我的问题是什么时候碰撞的解决方案?为什么我的第二个值不存储在linkedList中或存储在hashMap中的另一个位置?是由于equals还是hascode方法?

最好的祝福

2 回答

  • 0

    如果两个不同的密钥解析为散列映射中的同一个桶,则会发生冲突处理 . 在这种情况下,第二个条目将被放入链表中 .

    在您的情况下,您替换相同键(7)的条目,因此没有冲突 .

    如果你需要一个包含每个键多个值的映射,请使用 Map<key, Set<value>> (你也可以使用 List 等而不是 Set )并自行处理添加/删除该集合或使用Apache Commons的 MultiMap 或Google Guava的 Multimap ,例如 HashMultimap .

  • 3

    这与哈希冲突无关 . 哈希碰撞(即,具有相同 hashcode() 的键)由HashMap正确处理 . 在您的示例中,两个键都相等(即 . , 7.equals(7) == true ),因此旧值将被替换 .

    在以下示例中

    Map<Integer, String> map = new HashMap<>();
    map.put(7, "value 1");
    map.put(7, "value 2");
    System.out.println(map.get(7));
    

    你会在最后一行中发生什么?

    也许你正在寻找一个多图?

相关问题