146. LRU 缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在
Node newnode = new Node(key,value); if(map.containsKey(key)) { cache.delet(map.get(key)); cache.addfirst(newnode); map.put(key,newnode); } else { if(map.size() == capacity) { int k = cache.deletlast(); map.remove(k); } cache.addfirst(newnode); map.put(key,newnode); ...
private Node dummy;//dummy节点是一个冗余节点,dummy的next是链表的第一个节点,dummy的pre是链表的最后一个节点 private Map<Integer, Node> cache;//保存key-Node对,Node是双向链表节点 public LRUCache(int capacity) { this.capacity = capacity; dummy = new Node(0, 0); cache = new HashMap<>(); ...
思路:用LinkedHashMap实现 注意点,由于LinkedHashMap默认的LRU算法是根据键的进入顺序来定的,对于更新值和获取值的操作是忽视的,因此在更新值和获取值时我们需要先把原值删除再添进一个新值,这样实现的LRU算法才是题目所述的LRU算法。 LinkedHashMap内部的结构其实就是HashMap的基础上多个双向指针,下面给出LinkedHash...
在Java 中,LinkedHashMap 是上述有序哈希表(双向链表+哈希表)的实现,网上有许多关于 LinkedHashMap 源码的讲解,例如:LinkedHashMap 的实现原理。 在Python 中,有一种类似的实现,是 OrderedDict 。和 Java 中的 LinkedHashMap 不同,OrderedDict 只会在 set 新键时进行顺序的调整,当键已经出现在 OrderedDict 时,...
那么,什么数据结构同时符合上述条件呢?哈希表查找快,但是数据无固定顺序;链表有顺序之分,插入删除快,但是查找慢。所以结合一下,形成一种新的数据结构:哈希链表 LinkedHashMap。 LRU 缓存算法的核心数据结构就是哈希链表,双向链表和哈希表的结合体。这个数据结构长这样: ...
解法一:LinkedHashMap 因为允许使用已有的数据结构,LinkedHashMap就支持,所以直接继承LinkedHashMap即可,当然这是偷懒的做法,如果了解LinkedHashMap的实现的话,照着实现就可以了。importjava.util.LinkedHashMap;importjava.util.Map;publicclassLeetCode_146 {publicstaticvoidmain(String[] args) {// 测试用例LRU...
对于第一种方法, 需要不停地维护数据项的访问时间戳,另外,在插入数据、删除数据以及访问数据时,时间复杂度都是O(n)。对于第二种方法,链表在定位数据的时候时间复杂度为O(n)。所以在一般使用第三种方式来是实现LRU算法。 实现方案 4.使用LinkedHashMap实现 ...
在Java语言中有同样的数据结构LinkedHashMap。 接下来就来实现哈希表加双向链表实现LRU缓存机制。 2、代码实现 代码参考: publicclassLRUCache{classDLinkedNode{int key;int value;DLinkedNode prev;DLinkedNode next;publicDLinkedNode(){}publicDLinkedNode(int _key,int _value){key=_key;value=_value;}}pri...
在Python语言中有一种结合了哈希表和双向链表的数据结构OrderedDict 在Java语言中有同样的数据结构LinkedHashMap。 接下来就来实现哈希表加双向链表实现LRU缓存机制。 2、代码实现 代码参考: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 publicclassLRUCache{classDLinkedNode{int key;int value;DLinkedNode pr...