我想创建一个地图Integer
到String
,这个地图命令我的键。
所以我用:
TreeMap<Integer, String> thm = new TreeMap<Integer, String>();
thm.put(100, "String 1");
thm.put(11, "String 2");
thm.put(100, "String 3");
问题是当我有两个相同的键时,我的TreeMap
只包含一个!如何创建一个共同拥有两个相同kays的TreeMap
?如果TreeMap
无法解决我的问题,我该怎么办?
我看到你的回复是Guava Tree multi-map
,但是multiMap没有订购我的密钥
答案 0 :(得分:3)
为此,您可能需要使用Guava Tree multi-map。如果存在,则映射会使用新密钥覆盖现有密钥。
示例:
Multimap<String, String> myMultimap = TreeMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot")
以下是有关如何使用mutli-map的教程。
答案 1 :(得分:2)
如果每个键需要多个值,请查看Guava Multimap。
类似于Map的集合,但可以关联多个值 用一把钥匙。如果您使用相同的键调用put(K,V)两次,但是 不同的值,multimap包含从键到两者的映射 值。
特别是(为了满足您的排序要求),实现TreeMultimap将对键和值进行排序。来自doc:
Multimap的实现,其键和值按其排序 自然排序或由提供的比较器。
答案 2 :(得分:2)
java.util.Map 实现类不允许重复键。替代寻找 Guava Multimap 。
map.put("key1", "val1");
map.put("key1", "val2");
答案 3 :(得分:2)
当你使用TreeMap时,我想你对键上的自然排序感兴趣。
如果是这样,最简单的解决方案似乎使用TreeMap<Integer, List<String>>
,在添加时创建ArrayList<String>
并且没有任何内容,并且当项目已经存在时将其添加到列表中
答案 4 :(得分:1)
很容易处理从键到多个值的映射google guava libray Multimap
,它将键映射到值,类似于Map,但其中每个键可能与多个值相关联。 Multimap的实现是ArrayListMultimap,HashMultimap,SetMultimap等。
Multimap<Integer, String> thm = TreeMultimap.create();
thm.put(100, "key 1");
thm.put(11, "key 2");
thm.put(100, "key 3");
答案 5 :(得分:0)
无需依赖外部库,您可以创建
`Map<Integer,List<String>> thm= new TreeMap<Integer,List<String>>();`
添加你必须做的事
thm.get
如果它返回null,则将一个新的ArrayList与一个元素放在一起,如果它返回一个只附加到它的ArrayList