为什么在MultiMap中不保留插入顺序?

时间:2014-12-04 20:54:57

标签: java multimap

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

2 个答案:

答案 0 :(得分:20)

如果您想保留广告订单,请使用LinkedListMultimap

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

答案 1 :(得分:2)

  

为什么在MultiMap中没有保留插入顺序?

事实上,您的问题不在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不保留元素插入的顺序。