如何在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
不支持重复键。 您可以将集合用作相同键的值。
将指定的值与此映射中的指定键相关联(可选操作)。 如果映射先前包含键的映射,则旧值将替换为指定的值。
文档
您可以根据您的要求使用任何类型的List
或Set
实现。
如果你的值也可能重复,你可以使用ArrayList
或LinkedList
,如果值是唯一的,你可以使用HashSet
或TreeSet
等。
此外,在谷歌番石榴收集库中, 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>
但是,使用这种方法会产生性能影响。