在Map中添加两次相同的键

时间:2012-08-06 16:18:21

标签: java collections hashmap

我正在研究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

3 个答案:

答案 0 :(得分:22)

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

  

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

您还可以查看Map#put() javadoc(强调我的):

  

将指定的值与此映射中的指定键相关联(可选操作)。 如果地图以前包含该键的映射,则旧值将替换为指定的值。(当且仅当m.containsKey时,地图m包含键k的映射。 k)将返回true。)

答案 1 :(得分:2)

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

如果您想在地图中使用多个相同的键,则会存在各种解决方案。例如,请参阅番石榴Multimap

答案 2 :(得分:0)

如果新密钥与任何现有密钥相同,则覆盖地图中的值。