LinkedHashMap-源码分析
|
数据结构
LinkedHashMap 继承了HashMap,对HashMap进行了增强,通过内部维护了双向链表,使LinkedHashMap拥有了顺序访问的功能,提供了有序性。
1 | public class LinkedHashMap<K,V> |
内部构造
Entry内部维护了 before 和 after 两个entry,用于构建双向链表entry之间的指向关系,同时accessOrder 用于设置LinkedHashMap的读取是按照访问顺序还是插入顺序,通过这个accessOrder属性可以很容易实现 LRU1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17static 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;