如何检索与密钥关联的所有值?

时间:2009-02-12 13:46:00

标签: java map

我想在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相关的所有值?

6 个答案:

答案 0 :(得分:7)

你必须明白的是,在Map中,密钥是唯一的。

这意味着在

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

“1”映射到“X”

之后

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

“1”映射到“ABC”,前一个值(“X”)丢失

答案 1 :(得分:5)

来自HashMap javadoc:

public V put(K key, V value)
  

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

答案 2 :(得分:3)

不能

尝试使用google collections的Multimap

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

答案 4 :(得分: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”对应的值划分到他们自己的列表中,您可以轻松访问它们。只是不要忘记初始化列表......否则NullPointerException会来找你。

Yuval = 8 - )

答案 5 :(得分:1)

要做到这一点,你必须将每个键与一组值相关联,并使用相应的逻辑创建集合并从中输入/删除值,而不是在地图上使用简单的put()和get()。

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