9

我正在对Maps 进行研究,我发现如果我故意添加两次相同的键,那么 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
4

3 回答 3

25

因为Map 的约定是键必须是唯一的。因此,如果您将新值关联到现有键,它将覆盖现有条目的值,而不是创建新条目:

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

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

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

于 2012-08-06T16:19:35.183 回答
2

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

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

于 2012-08-06T16:26:36.943 回答
0

如果新键与任何现有键相同,则映射中的值将被覆盖。

于 2012-08-06T16:21:32.823 回答