Pet*_*rey 17
您可以通过实现removeEldest来使用LinkedHashMap
public static <K,V> Map<K,V> lruCache(final int maxSize) {
return new LinkedHashMap<K,V>(maxSize*4/3, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return size() > maxSize;
}
};
}
Run Code Online (Sandbox Code Playgroud)
更多细节
http://vanillajava.blogspot.co.uk/2011/06/java-secret-lru-cache-in-java.html
http://blog.meschberger.ch/2008/10/linkedhashmaps-hidden-features.html
你看过番石榴了吗?它具有基于工厂的方法,用于创建具有缓存等的集合.
例如(来自链接的文章)
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
Run Code Online (Sandbox Code Playgroud)
在 Android 上,您可以使用http://developer.android.com/reference/android/util/LruCache.html。我非常确定您可以从 AOSP 获取该实现并在 Apache 许可证下使用它。