# 实现一个 LRU (最近最少使用) 缓存机制

# 要求

  1. LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
  2. int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
  3. void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。
  4. 当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。
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);
    }
}
作者:王龙楷; 标签:原创; 提交时间: 1/14/2021, 4:22:34 PM