2012-01-19 30 views
32

¿Cómo puedo tener un HashMap con claves únicas en Java? O incluso, ¿tiene sentido tener claves únicas en HashMap o las teclas son únicas por defecto? Soy un novato. thx¿Cómo puedo tener un HashMap con claves únicas en java?

+5

Las llaves _son_ únicas por defecto. Tenga en cuenta que '.keySet()' en un 'Map' devuelve un' Set', y los elementos de un 'Set' son únicos por defecto. Si intenta insertar un valor en una clave existente, se sobrescribirá el valor anterior. – fge

+1

tenga en cuenta que "único" en Java significa igual en términos de implementación de los métodos iguales y hashcode! – Hachi

Respuesta

26

Las claves son únicas en todos los mapas. La diferencia entre las diversas implementaciones de mapas se refiere a la posibilidad de claves nulas, el orden de iteración y problemas de concurrencia.

47

La clave del mapa hash es única. Agregar clave duplicada, luego se sobrescribirá.

HashMap hm = new HashMap(); 
hm.put("1", new Integer(1)); 
hm.put("2", new Integer(2)); 
hm.put("3", new Integer(3)); 
hm.put("4", new Integer(4)); 
hm.put("1", new Integer(5));// value integer 1 is overwritten by 5 

Por defecto, Hashmap no está sincronizado.

+0

entonces, ¿cómo hacemos que la relación de valor clave no sea única, es decir, quiero también el valor 5 para la clave 1 anterior? ¿Hay algún método para cumplir ese propósito –

+0

@VamsiPavanMahesh, tendrá que almacenar algún tipo de 'Lista' o 'Mapa' para esa 'clave' correspondiente. 'Map m = new HashMap <>();' – Emz

1

HasMap tiene claves únicas. como .keySet() devuelve Set que tiene miembros únicos

1

HashMap es una colección para almacenar pares (clave, valor) y De acuerdo con la documentación de HashMap las claves son siempre únicas.

Si agrega una clave que ya existe (colisión) en el hashmap, se reemplazará el valor anterior.

1

Un hashmap genérico se implementa generalmente como una matriz asociativa, así que supongamos que su matriz tiene N elementos, de 0 a N-1, cuando desea agregar un nuevo par (clave, valor), lo que se hace detrás del escenas es (justo conceptualmente):

  1. index = almohadilla (clave) N mod
  2. array [index] = valor

Así, por construcción, una tecla está asignada a una y sólo una entrada de matriz

Tenga en cuenta que en realidad es un poco más complejo que esto: estoy haciendo caso omiso de las cosas de uso como la manipulación de colisión, refrito, etc, que pueden tener una buena idea general https://en.wikipedia.org/wiki/Hash_table

1

Trate de mirar el Java API for Map cuales es la interfaz que implementa HashMap. La primera oración es:

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.

Cuestiones relacionadas