LRU算法

202 阅读1分钟

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); 
    }
  }
}