# LRU 算法

  1. 快速查找

  2. 快速删除

  3. 保证顺序

最近(顺序)最少(快速查找,快速删除,快速插入)使用的最先消失(快速删除)

/**
 * @param {number} capacity
 */
var LRUCache = function (capacity) {
  // 大小
  this.cache = new Map()

  this.capacity = capacity
}

/**
 * @param {number} key
 * @return {number}
 */
LRUCache.prototype.get = function (key) {
  // 获取参数 并添加到最近使用 获取不到返回-1
  if (this.cache.has(key)) {
    const value = this.cache.get(key)
    this.cache.delete(key)
    this.cache.set(key, value)
    return value
  }
  return -1
}

/**
 * @param {number} key
 * @param {number} value
 * @return {void}
 */
LRUCache.prototype.put = function (key, value) {
  // 设置key value 设为最近使用
  if (this.cache.has(key)) {
    this.cache.delete(key)
  } else {
    // 有没有超过限制 超过了就删除最少使用的一个
    if (this.cache.size >= this.capacity) {
      const first = this.cache.keys().next().value
      this.cache.delete(first)
    }
  }

  this.cache.set(key, value)
}