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