LRU缓存实现(Java)

来源:互联网 发布:ios解析html网页数据 编辑:程序博客网 时间:2024/06/05 16:27

在多线程环境使用时可以使用 Collections.synchronizedMap()方法实现线程安全操作


package cn.lzrabbit.structure.lru;


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


/**
 * Created by liuzhao on 14-5-15.
 */
public class LRUCache2<K, V> extends LinkedHashMap<K, V> {
    private final int MAX_CACHE_SIZE;


    public LRUCache2(int cacheSize) {
        super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
        MAX_CACHE_SIZE = cacheSize;
    }


    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_CACHE_SIZE;
    }


    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<K, V> entry : entrySet()) {
            sb.append(String.format("%s:%s ", entry.getKey(), entry.getValue()));
        }
        return sb.toString();
    }
}