实现固定容量的 LRU(最近最少使用)缓存:
get(key):存在时返回值并标记为最近使用,否则返回 -1。put(key, value):写入或更新;超出容量时淘汰最久未使用项。O(1)。JavaScript 的 Map 不仅可以平均 O(1) 查找数据,还会按照插入顺序保存键。利用这个特性,可以让 Map 中的顺序表示数据的使用顺序:
get:保存值,删除该 key 后重新插入,将它标记为最近使用。put:先删除旧 key,再用新值重新插入。put:直接插入 Map 尾部。this.cache.keys().next().value 取得并删除第一个 key。get、put:平均 O(1)。O(capacity)。this.cache.has(key),不能使用 if (!this.cache.get(key)),否则值为 0 时会被误判为不存在。value,不能重新写入旧值。set 更新已有 key 的值不会改变它原来的顺序,因此必须先 delete 再 set。Map 保持插入顺序的语言特性;在不具备有序哈希表的语言中,通常需要使用“哈希表 + 双向链表”实现严格的 O(1) 操作。