Fork me on github

146 LRU缓存机制

用一个哈希表存储键值对,用双端队列存键值,每次使用数据时更新双端队列,以表示使用频率以及容量的限制。

import java.util.*;

class LRUCache {

    int capacity;
    Map<Integer, Integer> map = new HashMap<>();
    //队尾是最近使用的,队首是最久使用的
    Deque<Integer> deque = new LinkedList<>();

    public LRUCache(int capacity) {
        this.capacity = capacity;
    }

    public int get(int key) {
        if(map.containsKey(key)){
            deque.remove(key);
            deque.addLast(key);
            return map.get(key);
        }
        return -1;
    }

    public void put(int key, int value) {
        if(map.containsKey(key)){
            deque.remove(key);
        }
        else if(map.size() < capacity){
        }
        else{
            int tempKey = deque.removeFirst();
            map.remove(tempKey);
        }
        map.put(key, value);
        deque.addLast(key);
    }
}

posted @ 2020-08-20 18:46  zjy4fun  阅读(126)  评论(0编辑  收藏  举报