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

时间:2013-01-28 16:50:31

标签: java linkedhashmap

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

  

putAll方法为每个映射生成一个条目访问权限   指定的映射,按键提供的顺序映射的顺序   指定的map的条目设置迭代器。

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

3 个答案:

答案 0 :(得分:3)

此段落适用于使用the special constructor创建的地图,该地图根据上次访问顺序(相对于标准LinkedHashMap的插入顺序)生成迭代顺序。

它只是说,如果地图中有一个键K,而您putAll(someOtherMap)也包含someOtherMap,那么这将被视为对K的访问权限{1}}它将被移动到地图的末尾(从迭代顺序的角度来看)。

换句话说,从访问角度来看,K相当于putAll(伪代码)。

已举例:

for (Entry e : entries) map.put(e);

答案 1 :(得分:3)

注释(“putAll方法为指定映射中的每个映射生成一个条目访问权限,按照指定映射的条目集迭代器提供的键值映射的顺序。”)应该在API文档中查看上下文。以下是包含上下文的完整API文档:

  

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

本节描述了定义“访问”的内容,它影响“上次访问”的确定。在这种情况下,它继续描述如何处理关于映射访问的put / get和putall。 put(k,v)和get(k)被视为每个访问。类似地,putAll()被视为由条目集维护的所有映射的一个访问。您可以想象这样,对于每个putAll(),所有映射的访问计数器将按照条目集维护的顺序增加1。

希望这就是你要找的东西。

答案 2 :(得分:1)

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

将指定地图中的所有映射复制到此地图(可选操作)。对于在指定映射中从键k到值v的每个映射,此调用的效果等效于在此映射上调用put(k,v)的效果。如果在操作正在进行时修改了指定的映射,则此操作的行为是未定义的。

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