LinkedHashMap订单问题

Lin*_* Ma 7 java linkedhashmap

LinkedHashMap Javadocs中提到:

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

"收集视图上的操作"是什么意思?

Mat*_*all 7

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

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

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

  • @LouisWasserman同一段明确列出了生成访问权限的方法:get,put和putAll.并且没有一个观点具有任何这些方法,因此它似乎是多余的.但诚然,这并没有错,所以没什么大不了的. (2认同)

Evg*_*eev 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);
Run Code Online (Sandbox Code Playgroud)

产量

{1=1, 2=2, 3=3}
{1=1, 3=3, 2=2}
{1=1, 3=3, 2=2}
Run Code Online (Sandbox Code Playgroud)

也就是说,访问条目2-2改变了迭代顺序,并且访问keySet视图上的第一个条目1-1没有