尝试在java中实现LRU算法时,LinkedHashmap中的RemoveEldestEntry

时间:2016-08-13 17:51:34

标签: java algorithm lru

我有这段代码,我想了解它是如何工作的。

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;
    }

我知道它会覆盖removeEldestEntry课程中的LinkedHashMap,但我不太清楚如何理解。 我可以在我的班级声明中扩展LinkedHashmap而不会这样做,只是做常规覆盖,但我试图了解更多。 请问有人向我解释一下吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

LRUAlgoCacheImpl通过将composition的OO设计概念与anonymous inner class一起扩展LinkedHashMap以覆盖来实现LRU(最近最少使用)算法removeEldestEntry(Map.Entry)能够在地图大小超过提供的容量时逐出最旧的条目。

为什么将Composition用于继承?

主要原因在于,在Java中,您只能扩展一个类,而不像C ++,因此,如果您选择类Inheritance,如果您需要使代码发展,则可能会遇到设计问题。另一方面Composition使您实现接口是一个很好的设计实践,并且您可以根据需要实现任意数量的接口,Composition方法更灵活,因此是可维护性的更好选择。