2012-08-06 49 views
7

我在做Map的研究,我发现如果我故意添加相同的密钥两次,那么地图的大小保持不变。这背后的技术原因是什么?在地图中添加两次相同的密钥

Map map=new HashMap();//HashMap key random order. 
     map.put("Amit","Java"); 
     map.put("Amit","Java"); 

代码检索...

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

,我得到的结果是:

There are 1 elements in the map. 
Content of Map are... 
Amit Java 3943477 
+8

这就是Maps的全部要点。 – Pshemo 2012-08-06 16:21:16

回答

22

因为Map's contract是键必须是唯一的。因此,如果将新值与现有密钥相关联,它将覆盖现有条目的值,而不会创建新条目:

将键映射到值的对象。地图不能包含重复的键;每个键可以映射到最多一个值。

您还可以检查Map#put() javadoc(重点煤矿):

将指定值与此映射中(可选操作)指定的键。 如果映射先前包含密钥的映射,则旧值由指定值替换。(A地图米据说含有一个密钥k的映射当且仅当m.containsKey(K)将返回true。)

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html – 2012-08-06 16:20:07

+0

@ assylias ..感谢这个规则适用于各种形式的地图,无论它是树图等。 ! – user1579492 2012-08-06 16:22:18

+0

如果这个规则不适用,那么它不是一个有效的'Map'实现。所以,是的。 – 2012-08-06 16:23:13

0

如果新的关键是与任何现有的密钥,然后地图中的值将被覆盖。

2

一个标准的Java地图每个关键码只能有一个值。请注意,该值可能是是一个集合,因此可以有效地存储每个键的多个值。

如果你想在地图上有多个相同的键,存在各种解决方案。例如,参见Guava Multimap

相关问题