7

LinkedHashMap Javadocs中提到了它:

特别是,collection-views 上的操作不会影响 backing map 的迭代顺序。

“对集合视图的操作”是什么意思?

4

3 回答 3

7

s集合视图Map是以下对象返回的对象:

  • Map#keySet()
  • Map#values()
  • Map#entrySet()

对它们的操作仅仅意味着对集合视图实例的任何方法调用。

于 2013-01-31T16:14:44.560 回答
7

这个测试应该证明它是如何工作的

    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 并没有

于 2013-01-31T16:27:12.270 回答
3

如果我理解得很好,也许我没有,collection-view 是Collection通过它的抽象获得的s,比如entrySet、values 和keySet。

LinkedHashMap当您使用使您的对象按访问顺序排序的特殊构造函数时,这些集合中的操作不会影响您内部对象的访问顺序。

于 2013-01-31T16:18:52.820 回答