LinkedHashMap中'accessOrder'字段的用途是什么?

my *_*YAN 7 java collections linkedhashmap

LinkedHashMap.java使用了一个字段:

final boolean accessOrder;
Run Code Online (Sandbox Code Playgroud)

LinkedHashMap的构造函数是:

public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);
        this.accessOrder = accessOrder;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道accessOrder字段的用途.请举例说明accessOrder是'true和'false'.有没有其他方法来更新已创建对象的accessOrder字段?

Era*_*ran 8

a的条目LinkedHashMap可以按照键首次添加到Map的顺序(这是默认行为)或根据访问顺序(即最近访问的条目将是迭代的最后一个条目)进行迭代.

通过传递true给该accessOrder构造函数中的参数,您表示您希望根据访问顺序(而不是插入顺序)迭代条目.

Map<Integer,String> insertOrder = new LinkedHashMap<>(16,0.75f,false);
Map<Integer,String> accessOrder = new LinkedHashMap<>(16,0.75f,true);

insertOrder.put (1,"a");
insertOrder.put (3,"c");
insertOrder.put (2,"b");
String v = insertOrder.get(3);

accessOrder.put (1,"a");
accessOrder.put (3,"c");
accessOrder.put (2,"b");
v = accessOrder.get(3);

System.out.println(insertOrder);

System.out.println(accessOrder);
Run Code Online (Sandbox Code Playgroud)

输出:

{1=a, 3=c, 2=b} // the last inserted key (2) is last
{1=a, 2=b, 3=c} // the most recently accessed key (3) is last
Run Code Online (Sandbox Code Playgroud)