码迷,mamicode.com
首页 > 其他好文 > 详细

LinkedHashMap

时间:2019-01-27 16:40:24      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:name   ash   div   lse   order   ora   stat   oat   init   

概况:

LinkedHashMap是继承HashMap类,说明LinkedHashMap有HashMap的一切特性
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

LinkedHashMap 是基于 HashMap 实现的一种集合,具有 HashMap 集合上面所说的所有特点,除了 HashMap 无序的特点,LinkedHashMap 是有序的,因为 LinkedHashMap 在 HashMap 的基础上单独维护了一个具有所有数据的双向链表,该链表保证了元素迭代的顺序。

所以我们可以直接这样说:LinkedHashMap = HashMap + LinkedList。LinkedHashMap 就是在 HashMap 的基础上多维护了一个双向链表,用来保证元素迭代顺序。

所以在概念上面说,比hashmap多了before,after,head,tail这几个东东

技术分享图片

                                  (去掉红色和蓝色的虚线指针,其实就是一个HashMap。)

 

源码:

常量,注意:head和tail其实这两个类型和下面的after,before是一样的,注意匿名内部类

技术分享图片
    transient LinkedHashMap.Entry<K,V> head;//用来指向双向链表的头节点
    transient LinkedHashMap.Entry<K,V> tail;//用来指向双向链表的尾节点
    final boolean accessOrder;// true 表示按照访问顺序,会把访问过的元素放在链表后面,放置顺序是访问的顺序;false 表示按照插入顺序遍历
View Code

构造方法

技术分享图片
    public LinkedHashMap(int initialCapacity, float loadFactor) {
        super(initialCapacity, loadFactor);
        accessOrder = false;
    }

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

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

静态内部类:比hashmap只多了一个before和after,指向前后的entry

技术分享图片
    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);// entry的构造方法不同于其它的,它是直接调用父类的构造方法,就是下面那个,hashmap的一个静态内部类
        }
    }
    
    /*
     * hashmap的静态内部类node节点
     */
    static class Node<K,V> implements Map.Entry<K,V> {
        final int hash;
        final K key;
        V value;
        Node<K,V> next;

        Node(int hash, K key, V value, Node<K,V> next) {
            this.hash = hash;
            this.key = key;
            this.value = value;
            this.next = next;
        }
        ......
    }
View Code

更详细的东东,看这个就可以了,我也是: JDK1.8源码(九)——java.util.LinkedHashMap 类

 

 参考:

1)JDK1.8源码(九)——java.util.LinkedHashMap 类

图片来源:

1)JDK1.8源码(九)——java.util.LinkedHashMap 类

 

 

 

END!

LinkedHashMap

标签:name   ash   div   lse   order   ora   stat   oat   init   

原文地址:https://www.cnblogs.com/ericguoxiaofeng/p/10326014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!