Leetcode 146
bobo老师你好, 这道题官方给出了一个答案是用的LinkedHashMap,
相关代码:
class LRUCache extends LinkedHashMap<Integer, Integer>{
private int capacity;
public LRUCache(int capacity) {
super(capacity, 0.75F, true);
this.capacity = capacity;
}
public int get(int key) {
return super.getOrDefault(key, -1);
}
public void put(int key, int value) {
super.put(key, value);
}
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
return size() > capacity;
}
}这个
super(capacity, 0.75F, true);
我不太懂是什么意思. 然后就是最后这个
removeEldestEntry
方法, 我对size()的理解就是它就是这个LInkedHashMap所有entry的个数,但是这里为什么能直接就使用size(), 而不是xx.size()这样, 而且class里面也没有定义size
7
收起
正在回答 回答被采纳积分+1
1回答
liuyubobobo
2022-01-28 12:27:51
因为
LRUCache extends LinkedHashMap<Integer, Integer>
注意,这里是 extends,所以 LRUCache 类继承了 LinkedHashMap(而不是使用了 LinkedHashMap),所以,LRUCache 就是一个 LinkedHashMap。
你的这两个问题都和这一点有关:
1)
super(capacity, 0.75F, true);
的意思是调用父类(即 LinkedHashMap)的构造函数。
2)
因为 LinkedHashMap 本身就有 size,直接调用 size 的意思,就是调用自己的 size(),本质就是调用 this.size(),这里把 this 省略了。(而 xx.size() 调用的是 xx 的 size)。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星