2011-03-26 21 views
6

Estoy creando un programa que necesita almacenar pares clave-valor. El programa necesita aceptar solicitudes en forma de claves y devolver los valores respectivos.mapa de Java con claves duplicadas

El problema es que a veces hay valores múltiples para cada clave, y la clase de mapa no permite claves duplicadas.

Los valores son números, por lo que no puedo concatenar los valores como lo haría con las cadenas.

¿Hay alguna manera elegante de considerar el hecho de que puede haber más de un valor numérico para cada clave? Quiero que se devuelva cada número, no solo uno al azar.

Respuesta

19
$ cat YourMap.java 
public class YourMap extends HashMap<String, List<Integer>> { 
    public void put(String key, Integer number) { 
     List<Integer> current = get(key); 
     if (current == null) { 
      current = new ArrayList<Integer>(); 
      super.put(key, current); 
     } 
     current.add(number); 
    } 

    public static void main(String args[]) { 
     YourMap m = new YourMap(); 
     m.put("a", 1); 
     m.put("a", 2); 
     m.put("b", 3); 
     for(Map.Entry e : m.entrySet()) { 
      System.out.println(e.getKey() + " -> " + e.getValue()); 
     } 
    } 
} 

$ java map 
b -> [3] 
a -> [1, 2] 
+0

no se olvide de poner actual en el mapa después de crearlo. – MeBigFatGuy

+0

Tengo eso para ti :) –

+0

Ah, sí, doh. ¿Debo mencionar que el código no fue probado? :) –

11

La estructura que estás buscando se llama "multimap". Puede usar un mapa ordinario con ArrayLists como valores o puede usar una implementación multimap. Hay uno bueno en el kit de herramientas de "guayaba" de Google. Ver here.

4

Si realiza el valor de una lista, entonces será capaz de almacenar varios valores para una clave

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 
Cuestiones relacionadas