leetcode LRU cache

146. LRU 缓存

class LRUCache {
    Map<Integer, Node> cache;
    DLinkedNode list = new DLinkedNode();
    int capacity;

    public LRUCache(int capacity) {
        this.capacity =  capacity;
        cache = new HashMap<>(capacity);
    }
    
    public int get(int key) {
        Node node = cache.get(key);
        if(node == null) return -1;
        list.update(node);
        return node.value;
    }
    
    public void put(int key, int value) {
        Node node = cache.get(key);
        if(node != null){
            list.remove(node);
        }else if(cache.size() >= capacity) {
            Node rNode = list.removeTail();
            cache.remove(rNode.key);
        }
        Node adder = new Node(key, value);
        list.add(adder);
        cache.put(key, adder);
    }
}
class Node{
    int key;
    int value;
    Node pre;
    Node next;
    public Node(int key, int value){
        this.key = key;
        this.value = value;
    }
}
class DLinkedNode{
    Node head;
    Node tail;

    public DLinkedNode(){
        this.head = new Node(0, 0);
        this.tail = new Node(0, 0);
        head.next = tail;
        tail.pre = head;
    }

    void add(Node node){
        node.next = head.next;
        node.pre = head;
        head.next = node;
        node.next.pre = node;
    }

    void update(Node node){
        remove(node);
        add(node);
    }

    void remove(Node node){
        node.pre.next = node.next;
        node.next.pre = node.pre;
    }
    
    Node removeTail(){
        Node res = tail.pre;
        remove(res);
        return res;
    }
}
小鳖的Java知识库 文章被收录于专栏

记录日常学习、踩坑笔记、知识总结...

全部评论

相关推荐

给个offer灞:校友 是不是金die
点赞 评论 收藏
分享
激昂墓志铭_终章:亚新经典实习3300,转正7k外包。去那干啥,还要加班
投递亚信科技(中国)有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务