# 实现一个 LRU (最近最少使用) 缓存机制
# 要求
- LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
- int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
- void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。
- 当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。
class LRUCache{
constructor(capacity){
this.cache = new Map();
this.capacity = capacity;
}
get(key){
if(this.cache.has(key)){
let temp = this.cache.get(key);
this.cache.delete(key);
this.cache.set(key,temp);
return temp;
}
return -1;
}
put(key, value){
if(this.cache.has(key)){
this.cache.delete(key);
}else if(this.cache.size >= this.capacity){
// 最不好理解的地方
// 1. 如果容量达到上限,就删除第一个就行。
// 2. map结构的keys()方法,返回键的遍历器
// 3.获取第一个键,this.cache.keys().next().value
// 4. 删除第一个键
this.cache.delete(this.cache.keys().next().value);
}
this.cache.set(key, value);
}
}