LinkedHashMap 是由一个HashMap 和LinkedList 双向链表组成的。
LRU:最近最少使用算法可以使用LinkedHashMap来实现:
HashMap:只用来维护数据结构和获取数据,使得获取数据的时间复杂度为O(1),跟正常的HashMap的使用没有区别。
LinkedList:是一个双向链表,头节点指向链表头部,同时也指向链表尾部,所以LRU的每次数据更新排序的时间复杂度为O(1),每次获取数据,或者更新数据需要将对应的数据从节点中间转移到链表头部,这样就能使链表尾部的节点永远是最长时间没有被访问的,当添加数据时,发现数据的大小等于我们规定的容量了,就会将链表尾部的数据删除(同时也需要在HashMap上删除对应的数据),并将新添加的数据放入链表尾部。