LRU: "Least Recently Used"(最近最少使用) hashmap + 双向链表
当塞满之后 假如还要塞,就把最久没被使用的删除了,把新的加进来就行(可以通过双向链表模拟实现)
hashmap: key - Node 用于模拟实现 Cache
双向链表 (Node) O(1)的时间复杂度实现 头部增加 删除节点(任意节点 删除尾部可以先得到last 再 删除)
(tips: 虚节点 头head 尾巴 tail 不用纠结空指针了)
基本工具方法 都写完了 ,下面实现 LRU的两个主要方法
get(key):
1. 1map中没有key: 返回-1
1.2map中有key 先删除节点 再加到头部 返回val就行
put(key,val)
1. map中有key: 改变对应node的val 然后链表删除节点node 再加到头部
2.map中没有key ---- 要新增节点了
2.1 容量没满 : size++
新建节点 temp
链表 头部增加 temp,
map中put (key,Node)
2.2 容量满了: 删除最后一个节点
map中remove最后一个节点所对应的key和节点
新建节点 temp
链表 头部增加 temp,
map中put (key,Node)
标签:Node,map,删除,Cache,链表,LRU,key,节点 From: https://www.cnblogs.com/2801554297phw/p/17729108.html