2012-08-06 11 views
7

Estaba investigando en Map sy descubrí que si agrego la misma clave dos veces deliberadamente, el tamaño del mapa sigue siendo el mismo. ¿Cuál es la razón técnica detrás de esto?agregando la misma clave dos veces en el Mapa

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

para recuperar ...

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

El resultado que consigo:

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

Ese es el objetivo de Maps. – Pshemo

Respuesta

22

Debido Map's contract es que las claves deben ser únicas. Por lo tanto, si asocia un nuevo valor a una clave existente, anulará el valor de la entrada existente, no creará una nueva entrada:

Objeto que asigna claves a los valores. Un mapa no puede contener claves duplicadas; cada tecla se puede asignar a un máximo de un valor.

También puede comprobar Map#put() javadoc (el énfasis es mío):

Associates el valor especificado con la clave especificada en este mapa (operación opcional). Si el mapa contenía anteriormente una asignación para la clave, el valor anterior se reemplaza por el valor especificado. (Un mapa m se dice que contiene un mapeo para una clave k si y sólo si m.containsKey (k) volvería cierto.)

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html –

+0

@ assylias..Gracias es esta regla se aplica a todas las formas de mapa si es un mapa de árbol, etc. ! – user1579492

+0

Si esta regla no se aplica, entonces no es una implementación 'Map' válida. Entonces sí. –

0

Si la nueva clave es igual que cualquiera de las teclas existentes, a continuación, el valor en el mapa se sobrescribe.

2

Un mapa de Java estándar solo puede tener un valor por clave. Tenga en cuenta que ese valor podría ser ser una colección, y así puede almacenar efectivamente múltiples valores por clave.

Si desea tener varias claves idénticas en un mapa, existen varias soluciones. Ver la Guava Multimap, por ejemplo.

Cuestiones relacionadas