如何在HashMap中包含重复的键?

我需要键集中的链接和多个键。 我试过这个:

LinkedHashMap map = new LinkedHashMap(); map.put( -1505711364,"4"); map.put(294357273, "15"); map.put(-1593134417, "28"); map.put(-1231165758, "45"); map.put(121046798, "58"); map.put(294357273, "71"); map.put(-1593134417, "82"); map.put(-1231165758, "95"); map.put(121046798, "108"); 

我需要重复的密钥,这是保留订单。 这样做的方法是什么?

您不能在Map拥有重复的密钥。 您可以创建Map> ,或者如果可以,可以使用Guava的Multimap

 Multimap multimap = ArrayListMultimap.create(); multimap.put(1, "rohit"); multimap.put(1, "jain"); System.out.println(multimap.get(1)); // Prints - [rohit, jain] 

然后你可以使用Multimap#asMap()方法获取java.util.Map

使用Map>

 Map> map = new LinkedHashMap< Integer, List>(); map.put(-1505711364, new ArrayList<>(Arrays.asList("4"))); map.put(294357273, new ArrayList<>(Arrays.asList("15", "71"))); //... 

要在此地图中添加新的键/值对,请执行以下操作:

 public void add(Integer key, String newValue) { List currentValue = map.get(key); if (currentValue == null) { currentValue = new ArrayList(); map.put(key, currentValue); } currentValue.add(newValue); } 

Map不支持重复键。 您可以将集合用作相同键的值。

将指定的值与此映射中的指定键相关联(可选操作)。 如果映射先前包含键的映射,则旧值将替换为指定的值。

文档

您可以根据您的要求使用任何类型的ListSet实现。

如果你的值也可能重复,你可以使用ArrayListLinkedList ,如果值是唯一的,你可以使用HashSetTreeSet等。


此外,在谷歌番石榴收集库中, Multimap可用,它是一个将键映射到值的集合,类似于Map,但每个键可以与多个值相关联。 您可以将多图的内容可视化为从键到非空的值集合的映射:

 a → 1, 2 b → 3 

示例 –

 ListMultimap multimap = ArrayListMultimap.create(); multimap.put("a", "1"); multimap.put("a", "2"); multimap.put("c", "3"); 

hashMaps不能有重复的键。 也就是说,您可以创建一个包含列表值的地图:

 Map> 

但是,使用这种方法会产生性能影响。