尝试在 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
方法更加灵活,因此是可维护性更好的选择。
我有这段代码,我想了解它是如何工作的。
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
方法更加灵活,因此是可维护性更好的选择。