Java Map是多值并支持泛型?

时间:2011-10-14 20:54:00

标签: java data-structures

我注意到公地有一个MultiValueMap,但它不支持泛型。有这样的地图吗?

4 个答案:

答案 0 :(得分:10)

您是否尝试过Guava的Multimap?

  

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

     

根据实现,多图可能允许也可能不允许重复的键值对。换句话说,在添加相同的键和值两次之后的多图内容在实现之间变化。在允许重复的多图中,multimap将包含两个映射,get将返回包含该值两次的集合。在不支持重复的多图中,multimap将包含从键到值的单个映射,get将返回包含值一次的集合。

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

答案 1 :(得分:4)

绝对!查看Google Guava's Multimaps

Multimap<Foo, Bar> mm = new ListMultimap<Foo, Bar>();
// fill it however...
Foo foo = ...;
Collection<Bar> bars = mm.get(foo);

答案 2 :(得分:2)

可能Guava是一个更好的选择,但如果你真的想坚持使用Commons集合API:

http://sourceforge.net/projects/collections

  

受欢迎的Jakarta Commons-Collections项目的Java 5泛型启用版本。 Commons-Collections 3.1中的所有适当类都已经过重构,以支持Java泛型。

答案 3 :(得分:0)

自2013年11月以来

https://mvnrepository.com/artifact/org.apache.commons/commons-collections4支持通用集合!无需将番石榴放在桌子上。

只需从org.apache.commons.collections4而不是org.apache.commons.collections导入类:

import org.apache.commons.collections4.MultiValuedMap;
import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;

private MultiValuedMap<String, Employee> nameLookup = new ArrayListValuedHashMap<>();

http://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/MultiMap.html