Java 即使已存在具有指定键的项,访问顺序LinkedHashMap上的put()是否也是结构修改?

Java 即使已存在具有指定键的项,访问顺序LinkedHashMap上的put()是否也是结构修改?,java,linkedhashmap,Java,Linkedhashmap,标题一语道破: 据我所知,文档中有一点模棱两可。 首先,文档介绍了按插入顺序排列的LinkedHashMap,并注意到在插入已映射的项时,迭代顺序不受影响 然后,它引入了访问有序的LinkedHashMap,并坚持“仅仅一个get就是一个结构修改”,即它影响迭代顺序 但是,不清楚现有项的“”put()“”是否是结构修改 我希望答案是肯定的。这段简单的代码应该能回答您的问题: final Map<String, String> x = new LinkedHashMap<>

标题一语道破:

据我所知,文档中有一点模棱两可。 首先,文档介绍了按插入顺序排列的LinkedHashMap,并注意到在插入已映射的项时,迭代顺序不受影响

然后,它引入了访问有序的LinkedHashMap,并坚持“仅仅一个get就是一个结构修改”,即它影响迭代顺序

但是,不清楚现有项的“”put()“”是否是结构修改


我希望答案是肯定的。

这段简单的代码应该能回答您的问题:

final Map<String, String> x = new LinkedHashMap<>(10, 0.75f, true);
x.put("a", "a");
x.put("b", "b");
System.out.println(x);
x.put("a", "a");
System.out.println(x);

解释:
置于现有键下,即使具有相同的值,也是一种结构修改。

您最好的选择是尝试一下。这应该很简单。+1文档中说“访问顺序”,这意味着读和写。@PeterLawrey最常见的情况是什么都不必写,但隐式地必须进行读取才能得出结论。HashMap在更新密钥时有点愚蠢。它首先创建一个新条目,然后找个地方放置它(或替换原来的条目)@PeterLawrey当我们在“dumb”页面时,我对
HashSet
仅仅是
HashMap
上的一层很恼火,为每个元素实例化一个
Map.Entry
。这就是
Collections.newSetForMap
要做的。理论上,JVM可以优化这一点,但我怀疑它不能。Trove4j将映射实现为集合的扩展。;)
{a=a, b=b}
{b=b, a=a}