在HashMap中覆盖之前检索先前的键映射值

-1 java hashmap

HashMap根据我的代码创建了一个...

HashMap map=new HashMap();//HashMap key random order.
map.put("Amit","Java");
map.put("Saral","J2EE");
map.put("Saral","Andriod");//same key but different value 
map.put("Nitin","PHP");
map.put("hj","Spring1");
System.out.println("There are "+map.size()+" elements in the map.");
System.out.println("Content of Map are...");
Set s=map.entrySet();

Iterator itr=s.iterator();
while(itr.hasNext()){
    Map.Entry m=(Map.Entry)itr.next();
    System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
    }
Run Code Online (Sandbox Code Playgroud)

当我执行这个代码,该值key=SaralAndroid.有什么方法可以获得此密钥的先前值,这是J2EE什么?

Pét*_*rök 5

不,你不能用标准HashMap.最简单的解决方案是List在地图中存储as值,然后你可以在列表中添加多个项目(顺便说一句,你也应该使用泛型集合).为简化起见,您可以使用这样的辅助方法:

void addToMap(Map<String, List<String>> map, String key, String value) {
  List<String> list = map.get(key);

  if (list == null) {
    list = new ArrayList<String>();
    map.put(key, list);
  }
  list.add(value);
}

Map<String, List<String>> map = new HashMap<String, List<String>>();
addToMap(map, "Amit", "Java");
addToMap(map, "Saral", "J2EE");
addToMap(map, "Saral", "Andriod");//same key but different value 
addToMap(map, "Nitin", "PHP");
addToMap(map, "hj", "Spring1");
...
Run Code Online (Sandbox Code Playgroud)

这里的辅助方法只是一个例子 - 完整,强大的实现可能需要包括例如检查重复值,具体取决于您是否允许它们.如果没有,您可能更喜欢使用Set而不是List.

更新

要打印出这个映射的内容,你需要使用一个嵌入式循环遍历每个映射条目的值列表(顺便说一句,你可以使用foreach循环而不是迭代器):

for (Map.Entry<String, List<String>> m : map.entrySet())
{
  for (String v : m.getValue())
  {
    System.out.println(m.getKey()+"\t"+v+"\t"+ m.hashCode());
  }
}
Run Code Online (Sandbox Code Playgroud)