前端 JS 经典:LRU 缓存算法

前言:什么是 LRU 呢,单词全拼 Least Recently Used,意思是最久未使用 。这个算法是做缓存用的,比如,你要缓存一组数据,你要划分缓存块出来,因为不可能每个数据都做缓存,那么划出来的这个缓存块,就要遵守 LRU 缓存算法。比如你画出来了 4 个缓存块,你已经存了 4 个缓存数据,那么新的数据还要缓存进去,就需要删除之前的一个缓存,那么删除哪个呢,就是最久未使用的那个数据,算法实现如下:定义一个缓存内,用 map 来装键值对。# 代表的私有属性。has 判断是否有缓存数据,get 获取数据后,数据要变成最新使用的数据,要删的时候,不会删它,set存入新数据,然后删除最久未使用的数据。

javascript 复制代码
class LRUCache {
  #map;
  #length;
  constructor(len) {
    this.#map = new Map();
    this.#length = len;
  }

  has(key) {
    return this.#map.has(key);
  }
  get(key) {
    if (this.has(key)) return null;
    const value = this.#map.get(key);
    this.#map.delete(key);
    this.#map.set(key, value);
    return value;
  }
  set(key, value) {
    if (this.has(key)) {
      this.#map.delete(key);
    }
    this.#map.set(key, value);
    if (this.#map.size > this.#length) {
      this.#map.delete(this.#map.keys().next().value);
    }
  }
}
相关推荐
飘逸飘逸几秒前
Autojs进阶-插件更新记录
android·javascript
大漠_w3cpluscom3 分钟前
为什么 :is(::before, ::after) 不能工作?
前端
aXin_li5 分钟前
从原子化到工程化:Tailwind CSS 的深层价值与实践思考
前端·css
IT_陈寒6 分钟前
用Python爬虫抓了100万条数据后,我总结了这5个反封禁技巧
前端·人工智能·后端
qq_411262427 分钟前
AP模式中修改下wifi名称就无法连接了,分析一下
java·前端·spring
BUG创建者9 分钟前
uniapp 开发app时播放实时视频海康ws的流数据
前端·javascript·vue.js·uni-app·html·音视频
我是苏苏16 分钟前
Web开发:使用MediatR包实现中介者模式,避免组件之间直接通信
前端·中介者模式
Highcharts.js18 分钟前
数据可视化不仅属于金融、互联网|农业数据可视化设计:Farmable与Highcharts的前端设计
前端·信息可视化·数据可视化·highcharts·农业可视化
JuneXcy19 分钟前
node(2)
开发语言·前端·javascript·http·node.js
A923A20 分钟前
【Vue3大事件 | 项目笔记】第四天
前端·vue.js·笔记·前端项目