0

我想获取与 Map 中的键关联的所有值。例如,

Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC");
tempMap.put("2","RR");
tempMap.put("1","RT");

如何检索与键 1 关联的所有值?

4

6 回答 6

7

您必须了解的是,在 Map 中,键是唯一的。

这意味着之后

tempMap.put("1","X");

“1”映射到“X”

之后

tempMap.put("1","ABC");

“1”映射到“ABC”,之前的值(“X”)丢失

于 2009-02-12T13:49:28.127 回答
5

来自 HashMap javadoc:

public V put(K key, V value)

将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

于 2009-02-12T13:51:45.687 回答
3

不能

尝试使用google collections的 Multimap

于 2009-02-12T13:47:47.787 回答
3

我认为你错过了一些重要的东西:

Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC"); // replaces "X"
tempMap.put("2","RR"); // replaces "Y"
tempMap.put("1","RT"); // replaces "ABC"

此外,您应该尽可能使用泛型,因此您的第一行应该是:

Map<String, String> tempMap = new HashMap<String, String>();
于 2009-02-12T13:50:00.607 回答
3

你可以做的是:

Map<String, List<String>> tempMap = new HashMap<String, List<String>>();
tempMap.put("1", new LinkedList<String>());
tempMap.get("1").add("X");
tempMap.get("1").add("Y");
tempMap.get("1").add("Z");

for(String value : tempMap.get("1")) {
  //do something
}

这会将对应于键“1”的值划分到它们自己的列表中,您可以轻松访问该列表。只是不要忘记初始化列表...... elseNullPointerException会来找你。

尤瓦尔=8-)

于 2009-02-12T14:02:47.503 回答
1

为此,您必须将每个键与一组值相关联,并使用相应的逻辑来创建集合并从中输入/删除值,而不是 Map 上的简单 put() 和 get()。

或者您可以使用其中一种现成的 Multimap 实现,例如Apache commons 中的一种

于 2009-02-12T14:04:08.433 回答