Leetcode 146

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

正在回答 回答被采纳积分+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)。


继续加油!:)


  • 提问者 weixin_慕圣6334738 #1

    老师您好, 它的get方法里面有一个return super.getOrDefault(key, -1); 我需要怎么理解这个super直接调用getOrDefault,这是什么意思

    2022-02-28 07:46:18
  • liuyubobobo 回复 提问者 weixin_慕圣6334738 #2

    就是调用父类的 getOrDefault 方法。这个类继承了 LinkedHashMap,LinkedHashMap 类是这个类的父类,所以就是调用了 LinkedHashMap 类的 getOrDefault 方法。继续加油!:)

    2022-02-28 09:10:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

算法与数据结构
  • 参与学习       2636    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师