LinkedHashMap订单问题

时间:2013-01-31 16:11:29

标签: java linkedhashmap

LinkedHashMap Javadocs中提到:

  

特别是,对集合视图的操作不会影响后备映射的迭代顺序。

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

3 个答案:

答案 0 :(得分:7)

collection-views of Maps是返回的对象:

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

那些的操作只是意味着对集合视图实例调用任何方法。

答案 1 :(得分: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没有

答案 2 :(得分:3)

如果我理解得很好,也许我不理解,集合视图是通过其抽象获得的Collection,如entrySet,values和keySet。

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