{ LinkedHashMap }

  • LinkedHashMap-源码分析

    |

    数据结构

    LinkedHashMap 继承了HashMap,对HashMap进行了增强,通过内部维护了双向链表,使LinkedHashMap拥有了顺序访问的功能,提供了有序性。

    1
    2
    3
    public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

    内部构造

    Entry内部维护了 before 和 after 两个entry,用于构建双向链表entry之间的指向关系,同时accessOrder 用于设置LinkedHashMap的读取是按照访问顺序还是插入顺序,通过这个accessOrder属性可以很容易实现 LRU

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    static class Entry<K,V> extends HashMap.Node<K,V> {
    Entry<K,V> before, after;
    Entry(int hash, K key, V value, Node<K,V> next) {
    super(hash, key, value, next);
    }
    }

    // 头节点(最旧未使用)
    transient LinkedHashMap.Entry<K,V> head;

    // 尾节点 (最近使用)
    transient LinkedHashMap.Entry<K,V> tail;

    // 设置LinkedHashMap的读取顺序
    // false(default):插入顺序
    // true:访问顺序
    final boolean accessOrder;