LinkedHashMap
Posted ericguoxiaofeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinkedHashMap相关的知识,希望对你有一定的参考价值。
概况:
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 表示按照插入顺序遍历
构造方法
public LinkedHashMap(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor); accessOrder = false; } public LinkedHashMap(int initialCapacity) { super(initialCapacity); accessOrder = false; } public LinkedHashMap() { super(); accessOrder = false; }
静态内部类:比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; } ...... }
更详细的东东,看这个就可以了,我也是: JDK1.8源码(九)——java.util.LinkedHashMap 类
参考:
1)JDK1.8源码(九)——java.util.LinkedHashMap 类
图片来源:
1)JDK1.8源码(九)——java.util.LinkedHashMap 类
END!
以上是关于LinkedHashMap的主要内容,如果未能解决你的问题,请参考以下文章