LinkedHashMap中的“accessOrder”字段有什么作用?

12

LinkedHashMap.java中使用的一个字段是:

final boolean accessOrder;

LinkedHashMap 的构造函数是:

public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);
        this.accessOrder = accessOrder;
    }

我想知道 accessOrder 字段的作用。请给出一个示例,区分 accessOrder 为“true”和“false”的情况。是否有其他方法可以更新已创建对象的 accessOrder 字段?


链式哈希映射的迭代顺序方法:true 表示访问顺序,false 表示插入顺序。 - DimaSan
1
这在Javadoc中已经详细描述了,甚至可以说是明确指定的。你不理解的部分是什么? - user207421
2个回答

21

LinkedHashMap的条目可以按照键被添加到Map的顺序进行迭代(这是默认行为),也可以按照访问顺序进行迭代(即最近访问的条目将是被迭代的最后一个条目)。

通过在构造函数中向accessOrder参数传递true,表示您希望按照访问顺序(而不是插入顺序)迭代条目。

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);

输出:

{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

3
创建访问有序的LinkedHashMap所使用的构造函数如下:
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)

构造具有指定初始容量,负载因子和访问顺序的空LinkedHashMap实例。
如果accessOrder为false,则结果将按插入顺序排列。
如果accessOrder为true,则结果将按访问顺序排列。 LinkedHashMap按访问顺序排列的一个重要应用是构建LRU缓存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接