前端 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);
    }
  }
}
相关推荐
dear_bi_MyOnly19 小时前
【 HTML + CSS + JavaScript 学习速通 max】
javascript·css·学习·html·学习方法
可视之道20 小时前
前端大屏适配方案:rem、vw/vh、scale 到底选哪个?
前端
小码哥_常20 小时前
别在Android ViewModel里处理异常啦,真的很坑!
前端
05大叔20 小时前
RAG开发
java·服务器·前端
●VON20 小时前
Flutter组件通信详解:父子组件交互的最佳实践
javascript·flutter·华为·交互·harmonyos·von
console.log('npc')20 小时前
在 React 中,useRef、ref 属性以及 forwardRef 是处理“引用”(访问 DOM 节点或组件实例)的核心概念
前端·react.js·前端框架
小小小小宇20 小时前
语法全景对照
前端
weixin_7042660520 小时前
Spring Boot 入门了解
前端·firefox
冲浪中台20 小时前
如何实现低代码源码级交付和私有化部署
前端·低代码·私有化部署·源代码管理
Risehuxyc20 小时前
PHP 的缓存机制
开发语言·缓存·php