【问题标题】:What is purpose of 'accessOrder' field in LinkedHashMap?LinkedHashMap 中“accessOrder”字段的用途是什么?
【发布时间】:2016-08-16 12:01:21
【问题描述】:

LinkedHashMap.java中使用的字段是:

final boolean accessOrder;

LinkedHashMap的构造函数是:

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

我想知道字段 accessOrder 的用途。请举例说明 accessOrder 是否为“真”和“假”。有没有其他方法可以更新已创建对象的 accessOrder 字段?

【问题讨论】:

  • 链接哈希图的迭代排序方法:true为访问顺序,false为插入顺序。
  • Javadoc 中有描述,不,是指定的。哪一部分你不明白?

标签: java collections linkedhashmap


【解决方案1】:

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

输出:

{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

【讨论】:

    【解决方案2】:

    用于创建访问有序LinkedHashMap的构造函数如下:

    LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
    

    用指定的初始容量、加载因子和 accessOrder 构造一个空的 LinkedHashMap 实例。

    如果 accessOrder 为 false,则将导致插入顺序。

    如果accessOrder 为真,那么它会产生access Order。访问顺序LinkedHashMap的重要应用之一是构建LRU缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多