LRU缓存算法
class LRUCache {
constructor(len) {
this._map = new Map();
this._len = len;
}
has(key) {
return this._map.has(key);
}
get(key) {
if (this._map.has(key)) {
let val = this._map.get(key);
this._map.delete(key);
this._map.set(key, val);
return val;
} else {
return null
}
}
set(key, value) {
this._map.set(key, value);
if (this._map.size > this._len) {
this._map.delete(this._map.keys().next().value); // 通过迭代器拿到map中第一个元素的键
}
}
}
tip
知识点:Map.prototype.keys() Map实例的keys()方法会返回一个新的map迭代器对象,该对象包含了此 map 中每个元素的键,按插入顺序排列。
const map1 = new Map();
map1.set('0', 'foo');
map1.set(1, 'bar');
const iterator1 = map1.keys();
console.log(iterator1.next().value);
// Expected output: "0"
console.log(iterator1.next().value);
// Expected output: 1