分析
最近最少使用淘汰策略,设计到最近使用过的要后淘汰,那可以用一个链表,但是后淘汰的话,使用单向链表需要依次遍历到最后才能将第一个链表数据放到最后,所以采用双向链表比较方便。再一个数据是key value结构存储,可以用map存储数据,那用value存下链表的引用,这样链表发生改变,不影响map。只需要通过map的key值移除value。
实现
public class LRUCache {
class DLinkedNode {
int key;
int value;
DLinkedNode prev;
DLinkedNode next;
public DLinkedNode() {}
public DLinkedNode(int _key, int _value) {key = _key; value = _value;}
}
private Map<Integer, DLinkedNode> cache = new HashMap<Integer, DLinkedNode>();
private int size;
private int capacity;
private DLinkedNode head, tail;
public LRUCache(int capacity) {
this.size = 0;
this.capacity = capacity;
// 使用伪头部和伪尾部节点
head = new DLinkedNode();
tail = new DLinkedNode();
head.next = tail;
tail.prev &#

最低0.47元/天 解锁文章
4315

被折叠的 条评论
为什么被折叠?



