2013-06-22 15 views
6

Chcę usunąć najstarszy członek o LinkedHashSet, wiem, że tam jest removeEldestEntry sposób, że muszę zastąpić (Java doc for removeEldestEntry ) ale myślę, że mam do zdefiniowania initial capacity i load factor który I don” t care i po prostu chcę usunąć element, który był ostatnio ostatnio dostępny (tutaj przez dostęp mam na myśli bycie put, gdy jest już w zestawie lub jest czytany)LinkedHashSet wdrożyć LRU

Czy istnieje sposób, aby nie zastąpić removeEldestEntry?

Odpowiedz

15

wiem, że istnieje metoda removeEldestEntry że muszę ręcznym

To stwierdzenie jest błędne ponieważ LinkedHashSet HAS-A LinkedHashMap i nie jest-A.

można użyć przydatne (choć nie znany), Collections.newSetFromMap metoda:

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

Będzie zatem zwrócić Set wizję LinkedHashMap (zestaw podobny interfejs) wdrażanie metodę zwyczaj removeEldestEntry.

MAX_ENTRIES jest stałą niestandardową, którą można zdefiniować.