2016-08-13 1 views
2

J'ai ce code et je veux comprendre comment cela fonctionne.RemoveEldestEntry dans LinkedHashmap en essayant d'implémenter l'algorithme LRU en Java

public class LRUAlgoCacheImpl<K,V> implements IAlgoCache<K,V>{ 

    private int capacity; 

    private LinkedHashMap<K,V> lhm; 
    public LRUAlgoCacheImpl(int capacity) { 
     lhm = new LinkedHashMap<K,V>(capacity+1,1.1f, true) { 
      protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { 
       return lhm.size()> capacity; 
      } 
     };  
     this.capacity=capacity; 
    } 

Je comprends qu'il remplace le removeEldestEntry dans la classe LinkedHashMap, mais je ne comprends pas comment. Je pourrais étendre LinkedHashmap dans ma déclaration de classe sans le faire et juste en faisant des remplacements réguliers, mais j'essaie d'en savoir plus. Quelqu'un pourrait-il m'expliquer s'il vous plaît? Merci d'avance.

Répondre

1

La classe LRUAlgoCacheImpl implémente un LRU (moins récemment) algorithme en appliquant le concept de conception OO de composition avec un anonymous inner class qui étend un LinkedHashMap afin de passer outre removeEldestEntry(Map.Entry) pour être en mesure d'expulser la plus ancienne entrée lorsque la taille de la carte dépasse la capacité fournie. Pourquoi appliquer la composition sur l'héritage? Par exemple, si vous choisissez la classe Inheritance, vous risquez de rencontrer des problèmes de conception plus tard si vous avez besoin de faire évoluer votre code. D'un autre coté Composition vous permet d'implémenter des interfaces ce qui est une bonne pratique de conception et comme vous pouvez implémenter autant d'interfaces que vous le souhaitez, l'approche Composition est beaucoup plus flexible et donc un meilleur choix pour la maintenabilité.

+0

Salut, je vous remercie pour votre commentaire.Je n'ai pas compris la syntaxe elle-même, je veux dire, pendant la déclaration de nouveaux objets j'ouvre les parenthèses et la fonction de remplacement? merci d'avance – Timur

+0

Il s'agit d'une classe interne anonyme, vérifiez le lien dans ma réponse –

+0

Merci beaucoup! – Timur