![]()
#! -*- encoding=utf-8 -*-
from DoubleLinkedList import DoubleLinkedList, Node
class LRUcache(object):
def __init__(self, capacity):
self.capacity = capacity
self.map = {}
self.list = DoubleLinkedList(self.capacity)
def get(self, key):
if key in self.map:
node = self.map.get(key)
self.list.remove(node)
self.list.append_front(node)
return node.value
else:
return -1
def put(self, key, value):
# 如果这个键已经在缓存中 , 需要更新新的值 ,以及把这个键值对组合放在list的头部,并且更新map中的值
if key in self.map:
node = self.map.get(key)
self.list.remove(node)
node.value = value
self.list.append_front(node)
# 键未在缓存中
else:
node = Node(key, value)
if self.list.size >= self.capacity: # 缓存已满
old_node = self.list.remove() # 默认删除尾部的节点
del self.map[old_node.key]
self.list.append_front(node)
self.map[key] = node
# self.list.size -= 1 # 不需要再对list的size进行操作
else:
self.list.append_front(node)
self.map[key] = node
# self.list.size += 1 # 不需要再对list的size进行操作
def print(self): # 把缓存中的内容打印
self.list.print()
if __name__ == '__main__':
cache = LRUcache(2)
cache.put(1, 1)
cache.print()
cache.put(2, 2)
cache.print()
cache.put(3, 3)
cache.print()
print(cache.get(1))
cache.print()
print(cache.get(2))
cache.print()
print(cache.get(3))
cache.print()