【问题标题】:Why is insertion order not preserved in MultiMap?为什么 MultiMap 中不保留插入顺序?
【发布时间】:2014-12-04 20:54:56
【问题描述】:
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

【问题讨论】:

  • 地图不保持项目的顺序。
  • 这是MultiMaps的合同……这是查询演出的代价。
  • 一种选择是改用Map&lt;String, List&lt;String&gt;&gt;。这将为您提供按顺序插入的属性。

标签: java multimap


【解决方案1】:

如果您想保留广告顺序,请改用LinkedListMultimap

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

【讨论】:

  • LinkedListMultimap 是否允许重复键?
  • @vikramvi 是 LinkedListMultimap 允许重复
【解决方案2】:

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

实际上,您的问题不在于MultiMap,而在于所选的实现。 ArrayListMultimap 使用 HashMap&lt;K, Collection&lt;V&gt;&gt; 作为支持 Map&lt;K, Collection&lt;V&gt;&gt; 的实现:

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 不保留元素插入的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2010-10-14
    • 2012-12-12
    • 2014-05-29
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多