首页 > 其他分享 >List实现LRU

List实现LRU

时间:2024-08-14 15:29:18浏览次数:10  
标签:val 实现 cache List int LRU key public linkedHashMap

public class LRUCache {
    int cap;
    LinkedHashMap<Integer, Integer> linkedHashMap = new LinkedHashMap<>();

    LRUCache(int cap){
        this.cap = cap;
    }
    
    public int get(int key) {
        if (!linkedHashMap.containsKey(key)) {
            return -1;
        }

        makeUse(key);
        return linkedHashMap.get(key);
    }

    public void put(int key, int val) {
        if (linkedHashMap.containsKey(key)) {
            linkedHashMap.put(key, val);
            makeUse(key);
            return;
        }

        if (linkedHashMap.size() >= cap) {
            Integer next = linkedHashMap.keySet().iterator().next();
            linkedHashMap.remove(next);
        }
        linkedHashMap.put(key, val);
    }

    public void makeUse(int key) {
        //删除key
        Integer remove = linkedHashMap.remove(key);
        linkedHashMap.put(key, remove);
    }
}
public class LRUCache {    int cap;    LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>();    public LRUCache(int capacity) {        this.cap = capacity;    }    public int get(int key) {        if (!cache.containsKey(key)) {            return -1;        }        // 将 key 变为最近使用        makeRecently(key);        return cache.get(key);    }    public void put(int key, int val) {        if (cache.containsKey(key)) {            // 修改 key 的值            cache.put(key, val);            // 将 key 变为最近使用            makeRecently(key);            return;        }        if (cache.size() >= this.cap) {            // 链表头部就是最久未使用的 key            int oldestKey = cache.keySet().iterator().next();            cache.remove(oldestKey);        }        // 将新的 key 添加链表尾部        cache.put(key, val);    }    private void makeRecently(int key) {        int val = cache.get(key);        // 删除 key,重新插入到队尾        cache.remove(key);        cache.put(key, val);    }}

标签:val,实现,cache,List,int,LRU,key,public,linkedHashMap
From: https://www.cnblogs.com/jichenghui/p/18359068

相关文章

  • ArrayList/Vector/ListedList
    ArrayList:是数组数据结构,扩容是通过扩容数组。可快速访问其中一个元素或修改。ListedList:是链表数据结构,可高效的实现中间元素修改/删除。但是访问没有数组高效。vector:是强同步的ArrayList ArrayList扩容步骤1.判断申请的元素后,元素数量超过现有容量。privatevoidens......
  • 基于 canal+mysql 实现 yjs-schema 数据实时同步
    MySQL自动同步开源工具在现代的数据处理中,数据同步是非常重要的一个环节。MySQL作为一个广泛应用的数据库管理系统,自动同步数据也是一个比较常见的需求。今天我们将介绍一些开源工具,可以帮助我们实现MySQL数据库的自动同步。1.MaxScaleMaxScale是一个开源的MySQLProxy工具,它......
  • 基于Java+Vue的智慧园区综合管理系统:实现高效管理、智能运营(源代码)
    前言:智慧园区管理系统是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。楼......
  • 程序员面试题---------精细讲解DP协议编写网络程序以实现一个简单的加群和离群操作
    基于UDP协议编写网络程序以实现一个简单的加群和离群操作:假定:群组地址(224.0.2.100)服务器端地址为(192.168.14.44,具体根据主机指定)要求:1.加群的成员(客户端)加入一个群组后向管理者(服务器,地址公开)单播发送,“已加群”的消息,2.管理者(服务器每收到一个成员的加......
  • 喜欢黑丝还是白丝?AI绘画工具 ComfyUI局部重绘助你实现丝袜自由!想看什么直接生成~
    大家好,我是灵魂画师向阳不得不承认,荷尔蒙才是第一生产力!什么?你不信!看看那些短视频平台,发个普通视频也就几百的播放量,随便发个美女都能轻松上千,还有比这更容易的吗?!好了,随便感叹一下,我们现在进入正文。这篇文章的主题和美女有关,不过并不是教大家生产美女视频,而是讲解如何使......
  • 加速实现碳中和,PcVue赋能新能源充电
     加速实现碳中和,PcVue赋能新能源充电瓦讷市是法国西部城市,布列塔尼大区莫尔比昂省的一个市镇,同时也是该省的省会,下辖瓦讷区,其市镇面积为32.3平方公里,2021年1月1日时人口数量为54,420人,是该省人口第二多的市镇,在法国城市中排名第117位。瓦讷市已开始将其70辆热能公交车队逐步......
  • JavaWeb登录实现验证码功能
    1、新建两个工具类importjava.util.Arrays;publicclassCreateVerificationCode{/***验证码难度级别*/publicenumSecurityCodeLevel{Simple,Medium,Hard}publicstaticStringgetSecurityCode(){......
  • 实现二叉树的前序遍历
    序遍历的顺序是:先访问根节点,再访问左子树,最后访问右子树。递归和迭代classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intval){this.val=val;this.left=null;this.right=null;}}publicclass......
  • 实现二叉树的中序遍历
    中序遍历的顺序是:先访问左子树,再访问根节点,最后访问右子树。 classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intval){this.val=val;this.left=null;this.right=null;}}publicclassInorde......
  • 科普文:Java基础系列之【java框架基础:字节码增强技术框架ASM#ClassReader实现原理及源
    1概述ASM是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换。在读写的过程中可以加入自定义的逻辑以增强或修改原来已编译好的字节码,比如CGLIB用它来实现动态代理。ASM被设计用于在运行时对Java类进行生成和转换,当然也包括离线处理。ASM短小精......