LRU缓存是键和双链接节点的哈希表。哈希表使get()的时间为O(1)。双向链接节点列表使节点添加/删除操作为O(1)。
Java解决方案
定义一个双链表。
class Node{
int key;
int value;
Node prev;
Node next;
public Node(int key, int value){
this.key=key;
this.value=value;
}
}
通过分析获取和放置,我们可以总结出两个基本操作:
-
1)removeNode(Node t)
-
2)offerNode(Node t)
class LRUCache {
Node head;
Node tail;
HashMap<Integer, Node> map = null;
int cap = 0;
public LRUCache(int capacity) {
this.cap = capacity;
this.map = new HashMap<>();
}
public int get(int key) {
if(map.get(key)==null){
return -1;
}
//move to tail
Node t = map.get(key);
removeNode(t);
offerNode(t);
return t.value;
}
public void put(int key, int value) {
if(map.containsKey(key)){
Node t = map.get(key);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
由于篇幅原因,就不多做展示了
存中…(img-IjKD6qBW-1710697770137)]
[外链图片转存中…(img-fpnJ1qoA-1710697770138)]
[外链图片转存中…(img-yeeqEmJn-1710697770138)]
由于篇幅原因,就不多做展示了