2014-12-04 7 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); 
      } 
    } 
} 

Der obige Code gibt 1 2 tid 4 aus.Warum wird der Anzeigenauftrag in MultiMap nicht beibehalten?

Ich verstehe nicht, warum es nicht druckt tid 1 2 4.

+5

Karten halten nicht die Reihenfolge der Elemente. – DejaVuSansMono

+0

Dies ist der Vertrag von 'MultiMap's ... Dies ist der Preis, den Sie für Abfrageinterviews zahlen müssen. –

+0

Eine Option besteht darin, 'Map >' statt dessen zu verwenden. Dadurch erhalten Sie die Eigenschaft Insert-Insert. – merlin2011

Antwort

14

Verwenden LinkedListMultimap statt, wenn Sie die Anzeigenauftrag halten möchten:

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

Ermöglicht LinkedListMultimap doppelten Schlüssel? – vikramvi

2

Warum bestellen in MultiMap erhalten bleibt Einsetzen nicht?

In der Tat ist Ihr Problem nicht mit MultiMap, sondern mit der ausgewählten Implementierung. ArrayListMultimap verwendet eine HashMap<K, Collection<V>> als Implementierung der Träger 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; 
} 

Und HashMap nicht die Reihenfolge der Einfügung der Elemente erhalten.

Verwandte Themen