1

クイック LRU キャッシュを構築したいと考えています。この種のソリューションはこれを行うための良い方法ですか? 同期はどうですか?

removeEldestEntry という保護されたメソッドがあります。このメソッドは、アイテムがマップに追加されるときに呼び出されます。デフォルトの実装は単に false を返します。しかし、LinkedHashMap をサブクラス化し、このメソッドをオーバーライドして、最大サイズに達したかどうかを確認してから、true を返すことができます。LinkedHashMap は、リンクされたリストを介して最も古いエントリを見つけ、それを起動してから新しいエントリを追加します。

public class MyLRUMap<K,V> extends LinkedHashMap<K,V> {
private int maxCapacity;

public MyLRUMap(int initialCapacity, float loadFactor, int maxCapacity) {
super(initialCapacity, loadFactor, true);
this.maxCapacity = maxCapacity;
}

@Override
protected boolean removeEldestEntry(Entry<K,V> eldest) {
return size() >= this.maxCapacity;
 }
}

ありがとう

4

3 に答える 3