1

有什么方法可以使用 map 或任何其他集合来允许我们存储
具有不同值的重复键......
而不是使用 List 来存储同一个键的多个值?

4

5 回答 5

8

使用 Google Guava 的 MultiMap。这允许具有单个键的多个值

http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap.html

于 2013-10-22T13:33:10.577 回答
2

Map 不允许您拥有重复的键。这甚至没有意义。

可能的解决方案是拥有list(Collection) of values。去吧。如果有什么阻止你,让我们知道。

于 2013-10-22T13:31:25.133 回答
2

有一个Multimap概念。例如在番石榴中。番石榴中的多图

但它不是 Collection 框架的一部分。

如果你不喜欢这样的签名Map<String, List<Item>>,你可以很容易地用 object 包裹它。例如

class Items {
   private List<Item> items;
   public void add(Item i) {}
}

当然不可能通过地图实例添加项目map.add("key", item)

于 2013-10-22T13:34:53.273 回答
0

接下来呢?:

Map<String, List<String>> map = new HashMap<>();

添加值

// add "key1" and "value1"
if (!map.containsKey("key1")) {
    map.put("key1", new ArrayList<String>());
}
map.get("key1").add("value1");

// add "key1" and "value2"
if (!map.containsKey("key1")) {
    map.put("key1", new ArrayList<String>());
}
map.get("key1").add("value2");

获取值

List<String> values = map.get("key1");

这与字符串,但可以是任何类型。而且您不需要额外的库。

于 2013-10-22T13:32:14.420 回答
0

您可以使用 apache commons 集合中的 MultiMap

http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html

于 2013-10-23T07:41:36.607 回答