11

の最も古いメンバーを削除したいのですが、オーバーライドする必要がLinkedHashSetあるメソッド ( removeEldestEntry の Java doc ) があることはわかっていますが、定義する必要があると思います。最も最近アクセスされていない要素 (ここでのアクセスとは、既にセット内にあるか、読み取られていることを意味します)removeEldestEntryinitial capacityload factorput

オーバーライドしない方法はありますremoveEldestEntryか?

4

1 に答える 1

30

オーバーライドする必要がある removeEldestEntry メソッドがあることはわかっています

IS-A ではなくLinkedHashSetHAS-Aであるため、このステートメントは間違っています。LinkedHashMap

便利な (あまり知られていませんが) Collections.newSetFromMapメソッドを使用できます。

Set<String> mySet = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>(){
    protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) {
        return size() > MAX_ENTRIES;
    }
});

したがって、カスタムメソッドを実装Setする (セットのようなインターフェイス) のビジョンが返されます。LinkedHashMapremoveEldestEntry

MAX_ENTRIES定義したカスタム定数です。

于 2013-06-22T22:10:52.590 に答える