如果马屁中已经存在某个key了,在list添加修改后的node之后是不是应该map中也更新一下

来源:5-7 实现LRU缓存置换算法

林小堂

2020-01-12

老师您好,我发现您在实现FIFO和LRU的put方法时,如果map中已经存在该key了,需要用一个node先把该node保存,再在list中删除,再把新的node添加到list的尾部或者头部,后面没有对map进行更新,请问是否应该加上self.map[key] = node呢?期待老师的解答,谢谢老师

FIFO的put代码
def put(self, key, value):
    if self.capacity == 0:
        return
    if key in self.map:                 #如果key在缓存里面
        node = self.map.get(key)
        self.list.remove(node)
        node.value = value
        self.list.append(node)          #因为key和value是新的了,所以插到最后
LRU的put代码
    def put(self, key, value):
        if key in self.map:
            node = self.map[key]
            self.list.remove(node)
            node.value = value
            self.list.add_front(node)
写回答

1回答

咚咚呛

2020-01-13

不需要的,这里这个map和list的作用是不一样的,map是用于快速索引这个key是否在存储里面,而list则是关系到缓存的新老以及淘汰,所以对于list需要移除然后添加到头部,而这个节点依然存放在list里面,所以map不用进行这样的操作。

0
1
林小堂
谢谢老师 明白了!
2020-01-13
共1条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程