映射重复键但具有不同的值?

时间:2013-10-22 13:29:28

标签: java collections

有没有办法使用地图或任何其他集合,允许我们存储重复的密钥
具有不同的价值......
而不是使用List来存储同一个键的多个值?

5 个答案:

答案 0 :(得分:8)

使用Google Guava的MultiMap。这允许使用单个键

的多个值

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

答案 1 :(得分:2)

地图不允许您拥有重复的密钥。这甚至没有意义。

可能的解决方案是拥有list的{​​{1}}(收藏)。只是去吧。如果有什么事阻止你,请告诉我们。

答案 2 :(得分:2)

有一个Multimap概念。例如在番石榴中。 Multimap in guava

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

如果你不喜欢像Map<String, List<Item>>这样的签名,你可以轻松地用对象包裹它。例如。

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

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

答案 3 :(得分: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");

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

答案 4 :(得分:0)