0

如果已经问过这个问题,我很抱歉,但我不能很好地回答我的问题。我正在研究 HashMap 我把两个值 (7,"value test 1") (7,"value test 2) 根据规范 java API HashMap 把第一个值替换为第二个。

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

此致

4

2 回答 2

3

这与哈希冲突无关。HashMap 可以正确处理哈希冲突(即具有相同 的键hashcode())。在您的示例中,两个键相等(即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));

您希望最后一行会发生什么?

也许您正在寻找多图?

于 2014-04-23T12:22:28.093 回答
0

如果两个不同的键解析到哈希图中的同一个桶,就会发生冲突处理。在这种情况下,第二个条目将被放入链接列表中。

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

如果您需要一个每个键包含多个值的地图,请使用 a Map<key, Set<value>>(您也可以使用 aList等而不是 a Set)并自己处理对该集合的添加/删除或使用 Apache CommonsMultiMap或 Google Guava 的Multimap,例如HashMultimap.

于 2014-04-23T12:22:05.370 回答