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