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