我想创建一个向String
的映射Integer
,此地图订购了我的键。所以我使用:
TreeMap<Integer, String> thm = new TreeMap<Integer, String>();
thm.put(100, "String 1");
thm.put(11, "String 2");
thm.put(100, "String 3");
问题是当我有两个相同的键时,我的TreeMap
只包含一个!如何创建一个TreeMap
来填充两个相同的Kays?如果TreeMap
无法解决我的问题,我该怎么办?
我读到您的答复是Guava Tree multi-map
,但Multimap不订购我的密钥
您可能需要将番石榴树多图用于此目的。如果存在新密钥,则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的教程。
如果您每个键需要多个值,请查看guava multimap。
类似于地图的集合,但可能会关联多个值 用一个键。如果您两次致电(k,v),则使用相同的密钥,但是 不同的值,多映射包含从密钥到两者的映射 值。
特别是(以满足您的排序要求)实现TreemultImap将订购密钥和值。从文档:
实施多件事的键和值由其命令。 自然订购或通过提供的比较器。
当您使用treemap时,我想您对键上的自然分类感兴趣。
如果是这样,最简单的解决方案似乎使用 TreeMap<Integer, List<String>>
,在添加时创建ArrayList<String>
,没有任何内容,则无需将项目添加到列表中
java.util.map 实现类不允许重复键。有关 guava Multimap 的替代信息。
map.put("key1", "val1");
map.put("key1", "val2");
,很容易处理从键到多个值的映射Google guava libray Multimap
,它映射到值为值,类似于映射,但是每个键可以与多个值关联。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");
而不必依靠外部库,您可以创建
`Map<Integer,List<String>> thm= new TreeMap<Integer,List<String>>();`
要添加您必须做
thm.get
如果它返回null,则在一个元素上放置一个新的arraylist,如果它返回一个arraylist,您只需附加到它