在Map中添加两次相同的键

use*_*492 8 java collections hashmap

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

 Map map=new HashMap();//HashMap key random order.
         map.put("Amit","Java");
         map.put("Amit","Java");
Run Code Online (Sandbox Code Playgroud)

检索代码......

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)

结果我得到:

There are 1 elements in the map.
Content of Map are...
Amit    Java    3943477
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 24

因为Map的合同是密钥必须是唯一的.因此,如果将新值与现有键关联,它将覆盖现有条目的值,而不是创建新条目:

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

你也可以查看Map#put()javadoc(emphasis mine):

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