面试题 16.25. LRU缓存

题目链接

代码

class LRUCache {

    // 使用LinkedHashMap
    HashMap<Integer, Integer> map;
    // 因为LinkedHashMap是继承自HashMap的,初始化容量使用的是HashMap的,所以 24 = 32(当申请24容量的时候,实际给的是32)
    public int capacity;
    public LRUCache(int capacity) {
       // 映射地址,并且设置容量
        map = new LinkedHashMap<>(capacity);
       // 初始化容量
        this.capacity = capacity;
    }

    // 每次get,都将当前的元素移到最后面,不然就按照顺序进行排序
    public int get(int key) {
        if (map.containsKey(key)) {
            // remove key 返回的是value
            int value = map.remove(key);
            map.put(key, value);
            return value;
        }
        return -1;
    }

    public void put(int key, int value) {
        if (map.containsKey(key)) {
            map.remove(key);
            map.put(key, value);
            return;
        }
        map.put(key, value);
        // 如果超出了容量范围
        if (map.size() > capacity) {
            // 删除在头的
            map.remove(map.entrySet().iterator().next().getKey());
        }
    }
}

其他写法,在我写完,看别人题解的时候,发现代码和人家写的差不多,但是人家给出了其他几种写法,这里记录一下。

原文地址:https://www.cnblogs.com/bears9/p/13710102.html