常见算法-LinkedHashMap实现LRU

package common;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author : zhaoliang
 * @program :newCoder
 * @description : LRU缓存策略
 * @create : 2020/12/18 20:41
 */
public class LRUCache {
    //设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。
    //缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。
    private int capacity;
    Map<Integer,Integer> map;
    public LRUCache(int capacity){
        this.capacity = capacity;
        map = new LinkedHashMap<>();
    }
    public int get(int key){
        if (!map.containsKey(key)){
            return -1;
        }
        //先拿出来,再放进去,调整访问量
        Integer value = map.remove(key);
        map.put(key,value);
        return value;
    }
    public void put(int key,int value){
        if (map.containsKey(key)){
            //先拿出来,再放进去,调整访问量
            map.remove(key);
            map.put(key,value);
            return;
        }
        map.put(key,value);
        //超出capacity,删除最久没用的利用迭代器
        if (map.size() > capacity){
            map.remove(map.entrySet().iterator().next().getKey());
        }
    }
}

上一篇:LRU缓存删除最不经常使用的记录


下一篇:一日一技:实现有过期时间的LRU缓存