我正在阅读 Javadoc for LinkedHashMap
,其中提到:
putAll 方法为指定映射中的每个映射生成一个条目访问,按照指定映射的条目集迭代器提供键值映射的顺序。
我的问题是,“每个映射一个条目访问”是什么意思。如果有人可以帮助提供一个例子来澄清这一点,我们将不胜感激。
我正在阅读 Javadoc for LinkedHashMap
,其中提到:
putAll 方法为指定映射中的每个映射生成一个条目访问,按照指定映射的条目集迭代器提供键值映射的顺序。
我的问题是,“每个映射一个条目访问”是什么意思。如果有人可以帮助提供一个例子来澄清这一点,我们将不胜感激。
本段适用于使用特殊构造函数创建的映射,该构造函数根据最后访问顺序生成迭代顺序(相对于标准 LinkedHashMap 的插入顺序。
它只是说,如果一个键K
在映射中并且您也调用putAll(someOtherMap)
where someOtherMap
contains 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
}
应该在上下文中查看 API 文档中的注释(“putAll 方法为指定映射中的每个映射生成一个条目访问,按照指定映射的条目集迭代器提供键值映射的顺序。”)。以下是包含上下文的完整 API 文档:
提供了一个特殊的构造函数来创建一个链接的哈希映射,其迭代顺序是其条目最后一次访问的顺序,从最近最少访问到最近访问(访问顺序)。这种映射非常适合构建 LRU 缓存。调用 put 或 get 方法会导致访问相应的条目(假设它在调用完成后存在)。putAll 方法为指定映射中的每个映射生成一个条目访问,按照指定映射的条目集迭代器提供键值映射的顺序。没有其他方法生成条目访问...
本节描述影响“最后访问”确定的“访问”的定义。在这种情况下,它继续描述在访问映射方面如何处理 put/get 和 putall。put(k,v) 和 get(k) 分别被视为一次访问。类似地,putAll() 被视为按条目集维护的顺序对所有映射的一次访问。您可以将其想象为,对于每个 putAll(),所有映射的访问计数器都将按条目集维护的顺序增加 1。
希望这是您正在寻找的。
LinkedHashMap
保留将元素放入其中的顺序。putAll 方法用于将所有映射从指定映射复制到此映射。
将所有映射从指定映射复制到此映射(可选操作)。这个调用的效果等同于对指定映射中从键 k 到值 v 的每个映射调用一次 put(k, v) 在这个映射上的效果。如果在操作进行时修改了指定的映射,则此操作的行为是未定义的。
“每个映射一个条目访问”意味着 putall 调用的效果等同于在指定映射中从键 k 到值 v 的每个映射调用一次 put(k, v) 的效果。