尝试在 java 中实现 LRU 算法时,在 LinkedHashmap 中移除 EldestEntry

RemoveEldestEntry in LinkedHashmap while trying to implement LRU algorithm in 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;
    }

我知道它覆盖了 LinkedHashMap class 中的 removeEldestEntry,但我不太明白如何。 我可以在我的 class 声明中扩展 LinkedHashmap 而无需这样做,只是进行常规覆盖,但我正在尝试了解更多信息。 有人可以向我解释一下吗? 提前谢谢你。

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

为什么应用组合而不是继承?

主要原因是在 Java 中你只能扩展一个 class 不像 C++ 例如,所以如果你选择 class Inheritance 你可以如果您需要改进代码,请稍后再面对设计问题。另一方面,Composition 让你实现接口,这是一个很好的设计实践,因为你可以实现任意数量的接口,Composition 方法更加灵活,因此是可维护性更好的选择。