题目链接:LRUCache
分析:LRU最近最久未使用,可以把每次刚被访问过的节点从缓存区的左端加入,那么缓存区右端就是最近最久未使用的节点,缓存区满了的话就从右端删除。get时,就把节点从原位置移除,再从左端加入缓存区;set时,就把节点从左端加入缓存区,如果缓存区满了,就从右端移除一个节点。
Java实现:哈希表+双向链表:
虽然有LinkedHashMap结构,但还是需要自己实现双向链表结构。
代码如下:
//LRU缓存类:双向链表+HashMap(虽然java有自带的LinkedHashMap(结合了哈希表与双向链表结构),但还是希望能够自己实现一个双向链表)
//最近被访问过的节点在链表头部
public class LRUCache {
// 内部还有一个类
class DoubleLinkedList{
// 链表节点data区
int key;
int value;
// 链表节点指针区
DoubleLinkedList prev;
DoubleLinkedList next;
// 无参构造函数
private DoubleLinkedList(){};
// 构造函数
private DoubleLinkedList(int key,int value){
this.key=key;
this.value=value;
}
}
// LRUCache类的数