介绍
该实现与HashMap不同的是它维护一个双向链表,可以使HashMap有序。与HashMap一样,该类不安全。
结构
和HashMap的结构非常相似,只不过LinkedHashMap是一个双向链表
LinkedHashMap
分为两种节点 Entry
和 TreeNode
节点
Entry
节点结构:
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);
}
}
before
和 after
是双向链表中的前继和后继节点
TreeNode
节点和 HashMap
中的一样
从这里能看出 LinkedHashMap
是一个双向链表
LinkedHashMap
有如下属性:
transient LinkedHashMap.Entry<K,V> head;
transient LinkedHashMap.Entry<K,V> tail;
final boolean accessOrder;
head
和 tail
很好理解就是双向链表的头和尾
HashMap
中没有 accessOrder
这个字段,这也是与 HashMap
最不同的地方,该类有两种取值分别代表不同的意思 :
- true,按照访问顺序排序
- false,按照插入顺序排序
HashMap预留的一些方法
HashMap
预留了一些方法提供给 LinkedHashMap
使用
// LinkedHashMap重写了以下四个方法来保证双向队列能够正常工作
// 创建一个Node节点