LRU缓存

LRU缓存(Least Recently Used,最近最少使用)是一种数据缓存机制,旨在解决计算机内存中数据的替换问题。当缓存空间不足时,LRU缓存会淘汰最近最久未被使用的数据,以确保缓存中始终存储着最新和最频繁使用的数据。

java 复制代码
class LRUCache {
class Node{
    int key,val;
    Node pre,next;
    public Node(){}
    public Node(int key,int val){
        this.key = key;
        this.val = val;
    }
}
private ConcurrentHashMap<Integer,Node> cache = new ConcurrentHashMap<>();
private int size;
private int capacity;
private Node head = new Node();
private Node tail = new Node();
    public LRUCache(int capacity) {
        this.capacity = capacity;
        size = 0;
        head.next = tail;
        tail.pre = head;
    }
    
    public int get(int key) {
        Node node = cache.get(key);
        if(node == null)
            return -1;
        moveToHead(node);
        return node.val;
    }
    
    public void put(int key, int value) {
        Node node = cache.get(key);
        if(node != null){
            node.val = value;
            moveToHead(node);
        }else{
            Node newNode = new Node(key,value);
            cache.put(key,newNode);
            addToHead(newNode);
            ++size;
            if(size > capacity){
                Node removeNode = removeTail();
                cache.remove(removeNode.key);
                --size;
            }
        }
    }
    public void moveToHead(Node node){
        removeNode(node);
        addToHead(node);
    }
    public void removeNode(Node node){
        node.pre.next = node.next;
        node.next.pre = node.pre;
    }
    public void addToHead(Node node){
        node.pre = head;
        node.next  = head.next;
        head.next.pre = node;
        head.next = node;
    }
    public Node removeTail(){
        Node removeNode = tail.pre;
        removeNode(removeNode);
        return removeNode;
    }
}
相关推荐
不会计算机的捞地几秒前
【数据结构入门训练DAY-30】数的划分
数据结构·算法·深度优先
不务专业的程序员--阿飞3 分钟前
【SQL 如何解锁递归】
java·数据库·sql
嘵奇9 分钟前
Spring Boot拦截器详解:原理、实现与应用场景
java·spring boot·后端
八股文领域大手子10 分钟前
Java死锁排查:线上救火实战指南
java·开发语言·面试
jackson凌16 分钟前
【Java学习笔记】finalize方法
java·笔记·学习
fanTuanye20 分钟前
redis 缓存穿透,缓存击穿,缓存雪崩
java·redis·缓存
神秘的t37 分钟前
Spring Web MVC————入门(2)
java·spring·mvc
开开心心就好1 小时前
高效全能PDF工具,支持OCR识别
java·前端·python·pdf·ocr·maven·jetty
冷心笑看丽美人1 小时前
Spring MVC数据绑定和响应 你了解多少?
java·spring·mvc
XQ丶YTY1 小时前
大二java第一面小厂(挂)
java·开发语言·笔记·学习·面试