有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java LinkedHashMap中“accessOrder”字段的用途是什么?

LinkedHashMap在中使用了一个字段。java是:

final boolean accessOrder;

LinkedHashMap的构造函数是:

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

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


共 (2) 个答案

  1. # 1 楼答案

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

    LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
    

    构造具有指定初始容量、负载因子和accessOrder的空LinkedHashMap实例

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

    如果accessOrder为true,则将生成访问顺序。访问顺序LinkedHashMap的一个重要应用是构建LRU缓存

  2. # 2 楼答案

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

    通过将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