我有这段代码,我想了解它是如何工作的。
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
而不会这样做,只是做常规覆盖,但我试图了解更多。
请问有人向我解释一下吗?
提前谢谢。
答案 0 :(得分:1)
类LRUAlgoCacheImpl
通过将composition
的OO设计概念与anonymous inner class一起扩展LinkedHashMap
以覆盖来实现LRU(最近最少使用)算法removeEldestEntry(Map.Entry)
能够在地图大小超过提供的容量时逐出最旧的条目。
为什么将Composition用于继承?
主要原因在于,在Java中,您只能扩展一个类,而不像C ++,因此,如果您选择类Inheritance
,如果您需要使代码发展,则可能会遇到设计问题。另一方面Composition
使您实现接口是一个很好的设计实践,并且您可以根据需要实现任意数量的接口,Composition
方法更灵活,因此是可维护性的更好选择。