如果马屁中已经存在某个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回答
-
不需要的,这里这个map和list的作用是不一样的,map是用于快速索引这个key是否在存储里面,而list则是关系到缓存的新老以及淘汰,所以对于list需要移除然后添加到头部,而这个节点依然存放在list里面,所以map不用进行这样的操作。
012020-01-13
相似问题