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)。


继续加油!:)


0
hiuyubobobo
回复
heixin_慕圣6334738
hp>就是调用父类的 getOrDefault 方法。这个类继承了 LinkedHashMap,LinkedHashMap 类是这个类的父类,所以就是调用了 LinkedHashMap 类的 getOrDefault 方法。继续加油!:)

h022-02-28
共2条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2636 学习 · 1090 问题

查看课程

相似问题

leetcode 1248

回答 1

leetcode 907

回答 1

leetcode 332题

回答 1

回答 1