Why is insertion order not preserved in MultiMap?

喜夏-厌秋 提交于 2019-12-04 19:37:32

问题


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);
          }
    }
}

The above code prints 1 2 tid 4.

I am not understanding why it is not printing tid 1 2 4.


回答1:


Use LinkedListMultimap instead if you want to keep the insertion order:

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



回答2:


Why is insertion order not preserved in MultiMap?

In fact, your problem is not with MultiMap but with the selected implementation. ArrayListMultimap uses a HashMap<K, Collection<V>> as implementation of the backing 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;
}

And HashMap doesn't preserve the order of the insertion of the elements.



来源:https://stackoverflow.com/questions/27303883/why-is-insertion-order-not-preserved-in-multimap

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!