2013-06-22 1 views
6

Je veux supprimer le membre le plus âgé d'un LinkedHashSet, je sais qu'il ya une méthode removeEldestEntry que je dois remplacer (Java doc for removeEldestEntry ), mais je suppose que je dois définir initial capacity et load factor que je n » t soin et je veux simplement supprimer l'élément qui a été le moins récemment accédé (ici par l'accès je veux dire étant put alors qu'il est déjà dans l'ensemble ou en cours de lecture)LinkedHashSet pour mettre en œuvre LRU

Y at-il un moyen de ne pas outrepasser removeEldestEntry?

Répondre

15

Je sais qu'il ya une méthode removeEldestEntry que je dois override

Cette affirmation est fausse puisque LinkedHashSet HAS-A LinkedHashMap et non IS-A.

Vous pouvez utiliser l'utile (bien que peu connu), méthode Collections.newSetFromMap:

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

Il retournera donc une vision Set d'un LinkedHashMap (une interface Set-Like) mettre en œuvre votre méthode personnalisée removeEldestEntry.

MAX_ENTRIES étant une constante personnalisée que vous avez défini.