1

我试图为地图中的键提供多个值。我想让这种东西起作用..mapp.put("key1","value1") mapp.put("key1","value2")。第一个值“value1”被“value2”覆盖。如何保留这两个值?我应该去寻找除地图之外的任何其他东西来实现这一点吗?

4

5 回答 5

2

将两个 valyes 放入另一个集合(Vector、Set、Stack,任何适合您的用途;或其他任何东西),并将帽子集合作为值存储在地图中。

作为使用 Vector 的随机示例:

Vector<Object> myVector = new Vector<Object>();
myVector.add("value1");
myVector.add("value2");
mapp.put("key1", myVector);
于 2012-04-25T05:17:28.263 回答
1

Map的Javadoc ,

A map cannot contain duplicate keys; each key can map to at most one value.

因此,如果要为单个键放置多个值,则需要将值添加到列表中,并将 key1 和列表放入映射中。

于 2012-04-25T05:23:14.047 回答
1
HashMap<K, HashSet<V>> map = new HashMap<K, HashSet<V>>();
if(!map.containsKey(k)) {
  map.put(k, new HashSet<V>());
}
map.get(k).add(v);

如果您有重复的值,请使用列表/向量而不是哈希集。

于 2012-04-25T05:24:21.487 回答
1

您可以将 un map 与列表一起使用。像这样的东西:

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

将 a 放入key1第一个值:

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

将第二个值添加到key1

map.get("key1").add("value2");

您可以通过一种方法获得所有这些

public void add(String key, String value) {
    if (!map.containsKey(key)) {
        map.put(key, new LinkedList<String>());
    }
    map.put(key, value);
}

如果您想要 的值key1,您将获得List

List<String> values = map.get("key1");
于 2012-04-25T05:25:07.557 回答
0

如果您想要具有该行为的地图,还可以查看 Multimap

于 2012-04-25T05:20:30.010 回答