LRU算法是什么?
LRU算法:LeastRencentlyUsed 最少最近算法
为什么要有LRU算法?
目的:给一个缓存队列,但是缓存队列需要有一定限制,如果没有限制,就是越增越多,造成空间浪费,所以给缓存队列设置一个限制;需要经常删除不常用的内容。
如何实现一个LRU算法?
实现一个简单的LRU算法
例如:
const lru = new LRUCache(2);
输出
lru.put(1, 1);
lru.put(2, 2); // {1:1, 2:2}
lru.get(1);
lru.put(3, 3);
// {1:1, 3:3}
lru.get(2); // -1 lru.put(4,4); {4:4, 3:3} lru.get(1);
实现思路:
- 先定义一个类,接受参数缓存队列的最大值,缓存队列使用new Map定义
- 需要有get,put方法
- get获取方法:如果存在对应key,如果存在,删除,从新添加,更新新鲜度
- put添加方法:看是否存在对应key,如果存在,先删除;如果当前缓存队列的size>=maxLength;需要先删除,再添加;否则;直接添加
class LRUCache{
constructor(maxLength){
this.maxLength=maxLength;
this.cacheQuene=new Map();
}
get(key){
//增加新鲜度
if(this.cacheQuene.has(key)){
let result=this.cacheQuenet.get(key);
this.cacheQuene.delete(key);
this.cacheQuene.set(key,result);
}
}
put(key,value){
//如果存在,先删除
if(this.cacheQuene.has(key)){
this.cacheQuene.delete(key);
}
//如果当前缓存队列长度大于等于最大规定长度,就删除队头,再添加先数据
if(this.cacheQuene.size>=maxLength){
this.cacheQuene.delete(this.cacheQuene.keys().next().value)
this.cacheQuene.set(key,value);
}else{
//直接添加
this.cacheQuene.set(key,value);
}
}
}