关于下面的代码我有两个问题,
1.我的hashmap中有两次键“two”,而打印时,“two”只显示一次。为什么它不显示“two”两次?
2.如何有选择地显示“两个”键?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class main {
public static void main(String[] args){
HashMap<String,String> myMap = new HashMap<String,String>();
myMap.put("one", "1");
myMap.put("two", "2");
myMap.put("three", "3");
myMap.put("two", "4");
Set <String> mySet =myMap.keySet();
Iterator itr = mySet.iterator();
while(itr.hasNext()){
String key = (String) itr.next();
System.out.println(key);
}
}
}
答案 0 :(得分:3)
Hashmaps在其键集中每个键只能有一个键入口。当你使用相同的地图键(包括HashMap)时,第二次在地图中放置键值对将覆盖第一个键值。
如果你想要一对多的映射,你可以使用Multimap或HashMap将对象映射到一组对象(尽管Multimap很可能会让你更容易)
要显示给定键的值,请使用:
System.out.println(myMap.get(myKey));
System.out.println(myMap.get("two"));
答案 1 :(得分:2)
Hashtable
和HashMap
是一对一键值存储。这意味着对于一个键,您只能拥有一个元素。你仍然可以实现你想要的目标:
HashMap<String, List<String>>
向地图添加元素时,必须将其添加到此键的列表中,即
public void add(String key, String value) {
List<String> list = map.get(key);
if (list == null) { //if the list does not exist, create it, only once
list = new ArrayList<String>();
map.put(key, list);
}
list.add(value);
}
现在,当您想要使用此键获取所有元素时:
List<String> elements = map.get("two");
该列表将包含您添加的所有元素。