Leetcode 146
来源:1-1 哈希表基础
weixin_慕圣6334738
2022-01-28 09:54:03
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
1回答
liuyubobobo
2022-01-28
因为
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)。
继续加油!:)
相似问题