使用LinkedHashMap来实现一个使用LRU(Least Recently Used)算法的cache
removeEldestEntry在使用put或者putAll方法插入一个新的entry到map中时被调用,是否要删除年老的entry取决于是否满足既定的条件(比如本例中的条件:MAP中entry数量大于1000)。如果MAP表示缓存,这是有用的:它允许MAP通过删除过时条目来减少内存消耗。
import java.util.LinkedHashMap; import java.util.Map; public class LruCache { private final Map<Object, Object> store; private static final int MAX = 1000; public LruCache() { this.store = new LinkedHashMap<Object, Object>() { private static final long serialVersionUID = -3834209229668463829L;; /** * 当满足一定条件时删除Map中的年老的Entry */ @Override protected boolean removeEldestEntry(Entry<Object, Object> eldest) { return size() > MAX; } }; } public void put(Object key, Object value) { synchronized (LruCache.class) { store.put(key, value); } } public Object get(Object key) { synchronized (LruCache.class) { return store.get(key); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步