Java 使用LinkedHashMap.putAll()插入的元素的顺序是什么?

Java 使用LinkedHashMap.putAll()插入的元素的顺序是什么?,java,linkedhashmap,Java,Linkedhashmap,我正在阅读Javadoc for,其中提到: putAll方法为中的每个映射生成一个条目访问权限 指定的映射,按照提供键值映射的顺序 指定映射的条目集迭代器 我的问题是,“每个映射一个条目访问”是什么意思。如果有人能提供一个例子来澄清这一点,我们将不胜感激。LinkedHashMap保留您在其中放置元素的顺序。 putAll方法用于将指定映射中的所有映射复制到此映射 将所有映射从指定映射复制到此映射(可选操作)。对于指定映射中从键k到值v的每个映射,此调用的效果相当于在该映射上调用put(k,v

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

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


我的问题是,“每个映射一个条目访问”是什么意思。如果有人能提供一个例子来澄清这一点,我们将不胜感激。

LinkedHashMap
保留您在其中放置元素的顺序。 putAll方法用于将指定映射中的所有映射复制到此映射

将所有映射从指定映射复制到此映射(可选操作)。对于指定映射中从键k到值v的每个映射,此调用的效果相当于在该映射上调用put(k,v)一次。如果在操作进行过程中修改了指定的映射,则此操作的行为未定义


“每个映射一个条目访问”意味着putall调用的效果相当于在指定映射中从键k到值v的每个映射中在此映射上调用一次put(k,v)的效果。

本段适用于使用创建的映射,该映射根据上一次访问顺序生成迭代顺序(相对于标准LinkedHashMap的插入顺序

它只是说,如果一个键
K
在映射中,并且您调用
putAll(someOtherMap)
其中
someOtherMap
也包含
K
,这将被视为对
K
的访问,并且它将被移动到映射的末尾(从迭代顺序的角度)

换句话说,从访问的角度来看,
putAll
相当于
for(条目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
}
publicstaticvoidmain(字符串[]args)引发异常{
Map m=新LinkedHashMap(16,0.75f,真);
m、 将(“a”、“a”);
m、 认沽权(“b”、“b”);
System.out.println(“m=“+m);//a,b
m、 将(“a”、“a”);
System.out.println(“m=“+m);//b,a
Map m2=新LinkedHashMap();
m2.put(“b”、“b”);
m、 普塔尔(m2);
System.out.println(“m=”+m);//a,b:putAll被视为访问
//顺序也变了
}
应在上下文中查看API文档中的注释(“putAll方法为指定映射中的每个映射生成一个条目访问权限,顺序为指定映射的条目集迭代器提供键值映射。”)。以下是完整的API文档及其上下文:

提供了一个特殊的构造函数来创建一个链接的哈希映射,其迭代顺序是从最近访问的条目到最近访问的条目的顺序。这种映射非常适合构建LRU缓存。调用put或get方法会导致对相应条目的访问(假设在调用完成后存在该条目)。putAll方法为指定映射中的每个映射生成一个条目访问权限,按照指定映射的条目集迭代器提供键值映射的顺序。没有其他方法生成条目访问权限

本节描述了影响“上次访问”确定的“访问”的定义。在该上下文中,它接着描述了如何针对映射的访问处理put/get和putall。put(k,v)和get(k)分别被视为访问。类似地,putall()按条目集维护的顺序将所有映射视为一次访问。您可以想象,对于每个putAll(),所有映射的访问计数器将按条目集维护的顺序递增1

希望这就是您想要的。

LinkedHashMap保留您将元素放入其中的顺序。=>不在该上下文中。