Если вам нужна простота, вы не будете намного проще, чем использовать 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;
}
};
}
Основной недостаток в том, что он очень прост.
Если вы хотите егочтобы быть потокобезопасным, используйте Collections.synchronizedMap ()