2011-03-26 28 views
6

Sto creando un programma che deve memorizzare coppie chiave-valore. Il programma deve accettare le richieste sotto forma di chiavi e restituire i rispettivi valori.java map con chiavi duplicate

Il problema è che a volte ci sono più valori per ogni chiave e la classe della mappa non consente chiavi duplicate.

I valori sono numeri, quindi non posso concatenare in modo significativo i valori come farei con le stringhe.

Esiste un modo elegante per tenere conto del fatto che ci può essere più di un valore numerico per ogni chiave? Voglio che ogni numero venga restituito, non solo uno a caso.

risposta

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

non dimenticate di mettere corrente della mappa dopo averlo creato. – MeBigFatGuy

+0

Ho capito che per te :) –

+0

Ah, sì, doh. Devo dire che il codice non è stato testato? :) –

11

La struttura che stai cercando si chiama "multimappa". È possibile utilizzare una mappa ordinaria con ArrayLists come valori oppure è possibile utilizzare un'implementazione multimap. Ce n'è uno carino nel toolkit "guava" di Google. Vedere here.

4

Se si effettua il valore di una lista allora sarà in grado di memorizzare più valori per una chiave

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 
Problemi correlati