2014-12-04 18 views
8
public class MultiMap_Test { 
    public static void main(String[] args) { 
     Multimap<String, String> myMultimap = ArrayListMultimap.create(); 

      myMultimap.put("classlabel", "tid"); 
      myMultimap.put("Y", "1"); 
      myMultimap.put("Y", "2"); 
      myMultimap.put("N", "4"); 

      // Iterating over entire MutliMap 
      for(String value : myMultimap.values()) {   
       System.out.print(value); 
      } 
    } 
} 

Il codice sopra riportato stampa 1 2 tid 4.Perché l'ordine di inserimento non viene mantenuto in MultiMap?

Non capisco perché non stia stampando tid 1 2 4.

+5

Le mappe non mantengono l'ordine degli articoli. – DejaVuSansMono

+0

Questo è il contratto di 'MultiMap's ... Questo è il prezzo da pagare per le prestazioni di richiesta. –

+0

Un'opzione è quella di usare 'Mappa >'. Questo ti darà la proprietà insert-in-order. – merlin2011

risposta

14

Usa LinkedListMultimap invece se si desidera mantenere l'ordine di inserimento:

Multimap<String, String> myMultimap = LinkedListMultimap.create(); 
+0

LinkedListMultimap consente la chiave duplicata? – vikramvi

2

Perché ordine di inserimento non è conservato in MultiMap?

In realtà, il problema non è con MultiMap ma con l'implementazione selezionata. ArrayListMultimap utilizza un HashMap<K, Collection<V>> come attuazione del supporto Map<K, Collection<V>>:

public static <K, V> ArrayListMultimap<K, V> create() { 
    return new ArrayListMultimap<K, V>(); 
} 

//... 

private ArrayListMultimap() { 
    super(new HashMap<K, Collection<V>>()); 
    expectedValuesPerKey = DEFAULT_VALUES_PER_KEY; 
} 

E HashMap non conserva l'ordine di inserimento degli elementi.