を使用して LRU キャッシュを実装するクラスを作成していLinkedHashMap
ます。通常、オブジェクトがキャッシュに追加されたときにディスクに書き込み、オブジェクトがキャッシュに見つからない場合はディスクからフェッチするために、メソッドput
をオーバーライドする必要があります。get
私の LRUCache クラスは次のようになります。
public class LRUCache<K, V> extends LinkedHashMap<K, V>
implements Serializable {
/**
* File where the elements of the cache are stored
*/
private File cacheFile = null;
/**
* UID of the class for serialization.
*/
private static final long serialVersionUID = 1L;
/**
* Maximum number of entries in the cache.
*/
private final int maxEntries;
/**
* Default constructor of the cache.
*
* @param newMaxEntries
* the maximum number of entries in the cache.
*/
public LRUCache(final int newMaxEntries, String fileName) {
super(newMaxEntries + 1, 1.0f, true);
this.maxEntries = newMaxEntries;
this.cacheFile = new File(fileName);
}
@Override
public V get(Object key) {
V VObject = super.get(key);
if (VObject == null) {
// TODO: Fetch from disk
}
return VObject;
}
@Override
public V put(K key, V value) {
// TODO: Write to disk
return super.put(key, value);
}
@Override
protected final boolean
removeEldestEntry(final Map.Entry<K, V> eldest) {
return super.size() > maxEntries;
}
}
私の質問は、これら 2 つのメソッドをオーバーライドして、できるだけ速く実行する方法です。キャッシュされたオブジェクトが実装するのは良い考えでしょExternalize
うか?
ありがとう