1

我想创建一个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只包含一个!如何创建一个TreeMap包含两个相同 kays 的 cobntains ?如果TreeMap不能解决我的问题,我该怎么办?

我读了你的回复, Guava Tree multi-map 但 multiMap 没有订购我的钥匙

4

6 回答 6

3

为此,您可能需要使用番石榴树多地图。如果存在,则 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的教程。

于 2012-11-07T17:08:39.863 回答
2

如果每个键需要多个值,请查看Guava Multimap

类似于 Map 的集合,但可以将多个值与单个键相关联。如果您使用相同的键但值不同的两次调用 put(K, V),则多重映射包含从键到两个值的映射。

特别是(为了满足您的排序要求)实现TreeMultimap将对键和值进行排序。从文档:

Multimap 的实现,其键和值按其自然顺序或提供的比较器排序。

于 2012-11-07T17:09:52.047 回答
2

java.util.Map实现类不允许重复键。寻找 Guava Multimap的替代品。

map.put("key1", "val1");
 map.put("key1", "val2");
于 2012-11-07T17:10:50.593 回答
2

当您使用 TreeMap 时,我想您对键的自然排序感兴趣。

如果是这样,最简单的解决方案似乎使用 a TreeMap<Integer, List<String>>, 在添加时创建一个ArrayList<String>并且没有任何内容并在列表已经存在时将其添加到列表中

于 2012-11-07T17:10:50.350 回答
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");
于 2012-11-07T17:09:01.423 回答
0

无需依赖外部库,您可以创建一个

`Map<Integer,List<String>> thm= new TreeMap<Integer,List<String>>();`

要添加你必须做

  thm.get

如果它返回null,则放置一个带有一个元素的新ArrayList,如果它返回一个ArrayList,则只需附加到它

于 2012-11-07T17:11:08.067 回答