LinkedHashMap Javadocs中提到了它:
特别是,collection-views 上的操作不会影响 backing map 的迭代顺序。
“对集合视图的操作”是什么意思?
这个测试应该证明它是如何工作的
Map m = new LinkedHashMap(16, 0.75f, true);
m.put(1, 1);
m.put(2, 2);
m.put(3, 3);
System.out.println(m);
m.get(2);
System.out.println(m);
Set keys = m.keySet(); //API: Returns a Set view of the keys contained in this map.
keys.iterator().next();
System.out.println(m);
输出
{1=1, 2=2, 3=3}
{1=1, 3=3, 2=2}
{1=1, 3=3, 2=2}
也就是说,访问条目 2-2 改变了迭代顺序,而访问 keySet 视图上的第一个条目 1-1 并没有
如果我理解得很好,也许我没有,collection-view 是Collection
通过它的抽象获得的s,比如entrySet、values 和keySet。
LinkedHashMap
当您使用使您的对象按访问顺序排序的特殊构造函数时,这些集合中的操作不会影响您内部对象的访问顺序。