我想在hashmap上添加重复元素
所以:
put("name1", 1);
put("name1", 3);
put("name1", 3);
put("name2", 1);
put("name2", 3);
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
dog*_*ane 13
使用Map<String, List<Integer>>ie将字符串映射到整数列表.
因此,在这种情况下,name1将映射到[1,3,3]列表.
显然你必须编写自己的put方法,在其中将int添加到列表中.例:
put(String s, int i){
List<Integer> list = map.get(s);
if(list == null){
list = new ArrayList<Integer>();
map.put(s, list);
}
list.add(i);
}
Run Code Online (Sandbox Code Playgroud)
fin*_*nnw 13
Guava的ListMultimap接口可能符合您的要求.它允许重复键和重复键/值对.
ListMultimap<String, Integer> m =
ArrayListMultimap.create();
m.put("name1", 1);
m.put("name1", 3);
m.put("name1", 3);
m.put("name2", 1);
m.put("name2", 3);
System.out.println(m.get("name1")); // => [1, 3, 3]
System.out.println(m.get("name2")); // => [1, 3]
Run Code Online (Sandbox Code Playgroud)
你真的需要保留重复的键/值对吗?如果没有那么a HashMultimap可能就足够了(并且效率更高.)如果你输入相同的条目,HashMultimap你得到:
System.out.println(m.get("name1")); // => [1, 3]
System.out.println(m.get("name2")); // => [1, 3]
Run Code Online (Sandbox Code Playgroud)
您的想法违反了Map界面的合同:
An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
当你提问时,可以理解的是,地图会让人感到困惑:
map.get("name1")
Run Code Online (Sandbox Code Playgroud)
它不知道要获得哪个值.
我会使用dogbane将每个键映射到整数列表的解决方案.在您的示例中,您可能有重复的值.如果你不想要重复的值(即对于"name1",结果列表中只有一个3),你可以改为将字符串映射到整数集.