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;
    }
}
相关推荐
CC.GG10 分钟前
【Linux】进程概念(五)(虚拟地址空间----建立宏观认知)
java·linux·运维
无限进步_15 分钟前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬32 分钟前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
cwplh35 分钟前
DP 优化二:斜率优化 DP
算法·动态规划
以太浮标1 小时前
华为eNSP模拟器综合实验之- AC+AP无线网络调优与高密场景
java·服务器·华为
Hcoco_me1 小时前
大模型面试题90:half2,float4这种优化 与 pack优化的底层原理是什么?
人工智能·算法·机器学习·langchain·vllm
Mr__Miss1 小时前
JAVA面试-框架篇
java·spring·面试
浅念-1 小时前
链表经典面试题目
c语言·数据结构·经验分享·笔记·学习·算法
Python算法实战1 小时前
《大模型面试宝典》(2026版) 正式发布!
人工智能·深度学习·算法·面试·职场和发展·大模型
小马爱打代码1 小时前
SpringBoot:封装 starter
java·spring boot·后端