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

以上代碼打印1 2 tid 4。我不明白爲什麼它不打印tid 1 2 4爲什麼在MultiMap中沒有保存插入順序?

+5

地圖不保留項目的順序。 – DejaVuSansMono 2014-12-04 20:55:23

+0

這是'MultiMap'的合約...這是查詢表演所需付出的代價。 – 2014-12-04 20:57:24

+0

一種選擇是使用'Map >'代替。這將爲您提供按順序插入的屬性。 – merlin2011 2014-12-04 20:58:54

回答

14

使用LinkedListMultimap,而是如果你想保持插入順序:

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

LinkedListMultimap是否允許重複鍵? – vikramvi 2018-01-05 15:04:18

2

爲什麼在多重映射不保留插入順序?

事實上,您的問題不是MultiMap,而是與選定的實施。 ArrayListMultimap使用HashMap<K, Collection<V>>作爲實施的後盾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; 
} 

而且HashMap不保留的元素的插入順序。

相關問題