订购具有相同密钥的地图

时间:2012-11-07 17:07:12

标签: java map

我想创建一个地图IntegerString,这个地图命令我的键。 所以我用:

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没有订购我的密钥

6 个答案:

答案 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