-1

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());
    }

当我执行此代码时,key=Saral值为Android. 有什么方法可以获取此键的先前值,即J2EE?

4

5 回答 5

5

不,你不能用标准来做到这一点HashMap。最简单的解决方案是将 aList作为值存储在地图中,然后您可以将多个项目添加到列表中(顺便说一句,您也应该使用通用集合)。为简化起见,您可以使用如下辅助方法:

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");
...

这里的辅助方法只是一个说明——一个完整的、健壮的实现可能需要包括例如检查重复值,这取决于您是否允许它们。如果没有,您可能更喜欢使用 aSet而不是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());
  }
}
于 2012-04-17T16:05:28.223 回答
1

AMap每个键最多可以包含一个条目,因此当您调用 时map.put("Saral","Andriod"),旧"J2EE"值将被删除。要支持每个键的多个值,您需要维护一个Map<String, List<String>>或多个映射实现,例如 Guava 的Multimap.

作为旁注,我建议您在编译时开始使用泛型,例如Map<String, String>,Iterator<String>等以确保类型安全。

于 2012-04-17T16:07:05.247 回答
0

旧值被覆盖(替换)。一个唯一键将只有一个映射(条目)。因此它不再存在,因此您无法检索它。

于 2012-04-17T16:05:23.863 回答
0

您无法使用MapJava 提供的标准实现来做到这一点。但是有 MultiMap 的实现(这基本上就是你所追求的)。

一个例子是来自谷歌的这个:http: //google-collections.googlecode.com/svn/trunk/javadoc/index.html ?com/google/common/collect/Multimap.html

请注意,您将无法仅获得这一个接口,您还需要一些类。

于 2012-04-17T16:07:26.580 回答
0

正如其他人所说,这不适用于标准地图。但是,Google 的Guava提供了MultiMap接口,您可以使用该接口通过单个键存储多个值。

使用示例:

Multimap<String,String> multiMap = ArrayListMultimap.create();
multiMap.put("color", "red");
multiMap.put("color", "blue");
System.out.println(multiMap.get("color")); //returns a ["red', "blue"] list
于 2012-04-17T16:12:56.843 回答