简介
LRU(Least Recently Used)最近最少使用的意思。
LRU 算法的核心思想是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。
也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。
按照正常的思路,我们会想用一个数组来存储数据,数组越往后的数据越新。
每次访问数据后(即 get 方法),把它换到数组的最后一位。
每次存储数据后(即 set 方法),把数据放到最后一位。
这样想着好像很美好,但是我们存储数据的时候,传入 key 和 value,数组的索引是 number 哦,不是字符串。
所以不能用数组。
在 JS 中,有个数据结构叫做 Map,这个的 key 可以是任意类型,这就帮我们解决了索引的问题。
另外它的实例的键值中,有迭代器方法:map.keys.next(),我们可以利用这个方法,拿到实例中最老的数据
使用 Map 数据结构
class LRUCache {constructor(limit) {this.limit = limit || 5;this.map = new Map();}get(key) {const { map } = this;if (map.has(key)) {const temp = map.get(key);map.delete(key);map.set(key, temp);return temp;}}set(key, value) {const { map, limit } = this;if (map.has(key)) map.delete(key);if (map.size === limit) {const keys = map.keys()map.delete(keys.next().value)}map.set(key, value);}}
