菜单

波波
发布于 2020-06-02 / 0 阅读
0

手写简单的LRU缓存


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

/**
 * @author bo bo
 * @Package com.bobo
 * @date 2020/6/2 14:25
 * @copyright: Copyright (c) 2020
 * @version: V1.0
 * @Description:  手写LRU缓存
 */
public class LRUCache<K, V> extends LinkedHashMap<K, V> {

    private final int CACHE_SIZE;

    /**
     * 设置HashMap的初始大小,
     * 同时最后一个 true ,是让linkHashMap按照访问顺序来进行排序,最近访问的放在头部,最旧的数据放在尾部
     * @param cacheSize
     */
    public LRUCache(int cacheSize) {
        super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
        CACHE_SIZE = cacheSize;
    }

    /**
     * 当LinkHashMap内的数据size大于额定的Cache size ,那么就自动删除最老的数据
     */
    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > CACHE_SIZE;
    }
}