LinkedHashMap
内部维护了一个双向链表,能够保证元素按插入顺序的访问,可以用来实现LRU缓存策略,可以看做是LinkedList
+HashMap
其继承结构如下:
![](/Java集合/LinkedHashMap/linkedHashMap.png)
LinkedHashMap
继承了HashMap
拥有HashMap
的所有特性,并额为添加了一个双向链表存储所有的元素顺序,添加、删除元素的时候要同时维护HashMap
的存储数据和LinkedHashMap
的双向链表的数据,故从性能上来说会比HashMap
稍慢。
主要属性
1 | public class LinkedHashMap<K,V> |
构造器
1 | public LinkedHashMap(int initialCapacity, float loadFactor) { |
afterNodeInsertion(boolean evict)
1 | void afterNodeInsertion(boolean evict) { // possibly remove eldest |
afterNodeAccess(Node<K,V> e)
1 | void afterNodeAccess(Node<K,V> e) { // move node to last |
afterNodeRemoval(Node<K,V> e)
1 | void afterNodeRemoval(Node<K,V> e) { // unlink |
get(Object key)
1 | public V get(Object key) { |
总结
LinkedHashMap
继承自HashMap
具有HashMap
的所有特性LinkedHashMap
内部维护了一个双向队列- 若
accessOrder
为false 则按照插入元素的顺序遍历元素 - 若
accessOrder
为true 则按照访问元素的顺序遍历元素 LinkedHashMap
可以用来实现LRU缓存淘汰策略
1 | class LRU<K, V> extends LinkedHashMap<K, V> { |