字典类

3
在Java字典类中,是否可能一个键对应多个值?

请看我的回答,关于 Dictionary - 它被认为是一个过时的类。 - Uri
Java的字典类是什么?你指的是Hashtable吗? - oxbow_lakes
这似乎是这个问题的重播:https://dev59.com/2XNA5IYBdhLWcg3wNq8y,比之前发布了大约12个小时。两者都由名为Raji的人提出,但使用了不同的未注册帐户。 - Jonik
@oxbow,http://java.sun.com/javase/6/docs/api/java/util/Dictionary.html。我之前也不知道这个,但是Dictionary是Hashtable的一个抽象超类 - 而且它已经过时了,就像Uri所说的那样。这个问题很明显是重复的。 - Jonik
4个回答

3

首先,关于字典类:该类被认为已经过时,文档建议使用Map代替。

您正在寻找的这种集合被称为multimap。您可以使用列表自己实现一个,但那很繁琐。

您可能想要使用来自Apache Collections或Google Collections的MultiMap。虽然我个人是Apache Collections的粉丝,但它们并不真正支持泛型,因此Google multimap可能更安全。


2
您可以使用普通的Map,并将值设置为Collection
Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();

map.put(0, Arrays.asList("foo", "bar"));
map.put(1, new ArrayList<String>());

map.get(1).add("blag");

或者您可以使用MultiMap,它是来自Apache Commons Collections的一个工具。

A MultiMap is a Map with slightly different semantics. Putting a value into the map will add the value to a Collection at that key. Getting a value will return a Collection, holding all the values put to that key.

For example:

MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);

coll will be a collection containing "A", "B", "C".

很遗憾,MultiMap并没有使用泛型。


你不能将类型“int”用作通用参数,因为它是一个原始类型。请使用Integer代替。 - cd1
1
Google Collections比Apache Commons Collections更好。它使用泛型和其他Java 5功能实现,并且整体上似乎是Java Collections框架的更好扩展。请参阅http://www.javalobby.org/articles/google-collections/(搜索“Apache Commons”)。 - Jonik
如果没有任何限制,比如Java 1.4兼容的解决方案,那么就是真的(True)。 - akarnokd

2
当然。将列表用作值。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接