LinkedHashMap.putAll()以什么顺序插入元素?

Lin*_* Ma 6 java linkedhashmap

我正在阅读Javadoc for LinkedHashMap,其中提到了它:

putAll方法为指定映射中的每个映射生成一个条目访问,其顺序为指定映射的条目集迭代器提供键-值映射。

我的问题是,“每个映射一个入口访问”是什么意思。如果有人可以帮助提供一个例子来阐明这一点,将不胜感激。

ass*_*ias 3

本段适用于使用特殊构造函数创建的映射,该构造函数使迭代顺序基于最后的访问顺序(与标准 LinkedHashMap 的插入顺序相对)。

它只是说,如果键K位于映射中并且您也调用了putAll(someOtherMap)where someOtherMapcontains K,则这将被视为访问K并且它将被移动到映射的末尾(从迭代顺序的角度来看)。

换句话说,从访问的角度来看,putAll相当于for (Entry e : entries) map.put(e);(伪代码)。

人为的例子:

public static void main(String[] args) throws Exception {
    Map<String, String> m = new LinkedHashMap<> (16, 0.75f, true);

    m.put("a", "a");
    m.put("b", "b");
    System.out.println("m = " + m); // a, b
    m.put("a", "a");
    System.out.println("m = " + m); // b, a

    Map<String, String> m2 = new LinkedHashMap<>();
    m2.put("b", "b");

    m.putAll(m2);
    System.out.println("m = " + m); // a, b: putAll was considered as an access
                                    // and the order has changed
}
Run Code Online (Sandbox Code Playgroud)