下面是一个简单又快速的LRU的简单Cache类。
public class SimpleCache { private static long wideHits; private static long wideMisses; private Hashtable cache; private Vector stamps; private int maxSize; private long hits; private long misses; public static long getWideHits() { return wideHits; } public static long getWideMisses() { return wideMisses; } public SimpleCache(final int size) { this.maxSize = size; cache = new Hashtable(size); stamps = new Vector(size); } public int getMaxSize() { return maxSize; } public void setMaxSize(final int maxSize) { this.maxSize = maxSize; } public int getSize() { return cache.size(); } public void add(final Object key, final Object object) { final Hashtable cache = this.cache; if (!cache.containsKey(key)) { if (cache.size() == maxSize) { discard(); } cache.put(key, object); stamps.insertElementAt(key, 0); } else { cache.put(key, object); touch(key); } } public void remove(final Object key) { if (stamps.contains(key)) { stamps.removeElement(key); cache.remove(key); } } public void clear() { cache.clear(); stamps.removeAllElements(); hits = misses = 0; } public synchronized Object get(final Object key) { final Object o = cache.get(key); if (o != null) { hits++; wideHits++; touch(key); } else { misses++; wideMisses++; } return o; } public long getHits() { return hits; } public long getMisses() { return misses; } private void discard() { final Object key = stamps.lastElement(); stamps.removeElement(key); cache.remove(key); } private void touch(final Object key) { stamps.removeElement(key); stamps.insertElementAt(key, 0); } }