LinkHashMap

79 阅读1分钟

LinkHashMap

1.无参构造函数,访问顺序false accessOrder false: 基于插入顺序 true: 基于访问顺序

public LinkedHashMap() {
    super();
    accessOrder = false;
}

2.一个参数,指定量,直接调用父类构造函数初始化,访问顺序false{父类为HashMap,所以这点与HashMap相同}

public LinkedHashMap(int initialCapacity) {
    super(initialCapacity);
    accessOrder = false;
}

3.访问顺序为false,将map添加到linkHashMap(中间有判断长度等,将元素一个个循环添加到)

public LinkedHashMap(Map<? extends K, ? extends V> m) {
    super();
    accessOrder = false;
    putMapEntries(m, false);
}

4.指定容量,指定负载因子,指定顺序

public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder) {
    super(initialCapacity, loadFactor);
    this.accessOrder = accessOrder;
}
    简言之,LinkedHashMap是HashMap的子类,但是内部还有一个双向链表维护键值对的顺序,每个键值对既位于哈希表中,也位于双向链表中。LinkedHashMap支持两种顺序插入顺序 、 访问顺序

1.插入顺序:先添加的在前面,后添加的在后面。修改操作不影响顺序.访问顺序:所谓访问指的是get/put操作,对一 个键执行get/put操作后,其对应的键值对会移动到链表末尾,所以最末尾的是最近访问的,最开始的是最久没有被访 问的,这就是访问顺序。