简介

LRU(Least Recently Used)最近最少使用的意思。

LRU 算法的核心思想是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小
也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。

按照正常的思路,我们会想用一个数组来存储数据,数组越往后的数据越新。
每次访问数据后(即 get 方法),把它换到数组的最后一位。
每次存储数据后(即 set 方法),把数据放到最后一位。

这样想着好像很美好,但是我们存储数据的时候,传入 key 和 value,数组的索引是 number 哦,不是字符串。
所以不能用数组。

在 JS 中,有个数据结构叫做 Map,这个的 key 可以是任意类型,这就帮我们解决了索引的问题。
另外它的实例的键值中,有迭代器方法:map.keys.next(),我们可以利用这个方法,拿到实例中最老的数据

使用 Map 数据结构

  1. class LRUCache {
  2. constructor(limit) {
  3. this.limit = limit || 5;
  4. this.map = new Map();
  5. }
  6. get(key) {
  7. const { map } = this;
  8. if (map.has(key)) {
  9. const temp = map.get(key);
  10. map.delete(key);
  11. map.set(key, temp);
  12. return temp;
  13. }
  14. }
  15. set(key, value) {
  16. const { map, limit } = this;
  17. if (map.has(key)) map.delete(key);
  18. if (map.size === limit) {
  19. const keys = map.keys()
  20. map.delete(keys.next().value)
  21. }
  22. map.set(key, value);
  23. }
  24. }