我们已经讲解了HashMap的实现原理,LinkedHashMap是HashMap的子类,在其基础上实现了元素的排序功能,接下来对LinkedHashMap的实现进行一个了解。
目录
-
底层数据结构
LinkedHashMap就是实现了LRU(Least Recent Use, 最近最少使用)排序的HashMap,LinkedHashMap就是在HashMap的基础上,在Entry<key,value>对象中添加了before和after两个指针,构成一个双向链表(最少使用的在head,最多使用的在tail),用来存储元素的访问顺序(get和put都算访问),这个双向链表的重要操作就是,当访问了一个元素,那么把他从双向链表中删除,并把它放进双向链表的表头。
LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。
LinkedHashMap的节点定义如下:
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);
}
}
我了便于理解,我们对LinkedHashMap做如下操作:
插入a——>插入b——>插入c——>访问a
那么我们可以得到按照访问顺序来说,排序应该是:b、c、a
此时的LinkedHashMap的结构如下:
LinkedHashMap定义了排序模式accessOrder,该属性为boolean型变量,对于访问顺序,为true;对于插入顺序,则为fa