当前位置: 首页 > news >正文

LinkedList 实现 LRU 缓存

LRU(Least Recently Used,最近最少使用)缓存是一种缓存淘汰策略,用于在缓存满时淘汰最久未使用的元素。

关键:

缓存选什么结构?

怎么实现访问顺序?

import java.util.*;public class LRUCache<K, V> {private final int capacity; // 缓存容量private final Map<K, V> cache; // 用于存储缓存数据private final LinkedList<K> order; // 用于维护访问顺序public LRUCache(int capacity) {this.capacity = capacity;this.cache = new HashMap<>(capacity);this.order = new LinkedList<>();}public V get(K key) {if (!cache.containsKey(key)) {return null; // 如果缓存中不存在该键,返回 null}// 将访问的键移到队列的尾部,表示最近使用order.remove(key);order.addLast(key);return cache.get(key);}public void put(K key, V value) {if (cache.containsKey(key)) {// 如果缓存中已经存在该键,更新值并将键移到队列的尾部cache.put(key, value);order.remove(key);order.addLast(key);} else {if (cache.size() >= capacity) {// 如果缓存满了,移除最久未使用的键K oldestKey = order.removeFirst();cache.remove(oldestKey);}// 添加新键值对到缓存cache.put(key, value);order.addLast(key);}}public static void main(String[] args) {LRUCache<String, String> lruCache = new LRUCache<>(3);lruCache.put("1", "one");lruCache.put("2", "two");lruCache.put("3", "three");System.out.println(lruCache.get("1")); // 输出: onelruCache.put("4", "four");System.out.println(lruCache.get("2")); // 输出: null (因为2是最久未使用的)}
}

 测试讲解:

先定义了大小为3的缓存,然后存1,2,3,此时的访问顺序1-2-3,list头部是最早访问的,尾部是最晚访问的,此时缓存已满,然后访问了1,则现在的顺序是2-3-1,可见,2是那个最久没被访问的,我再添加新元素4时,需要删除的是2,顺序变成3-1-4。

        

相关文章:

LinkedList 实现 LRU 缓存

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于在缓存满时淘汰最久未使用的元素。 关键&#xff1a; 缓存选什么结构&#xff1f; 怎么实现访问顺序&#xff1f; import java.util.*;public class LRUCac…...

ubuntu安装workon

pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件&#xff08;比如.bashrc&#xff0c;.bash_profile或.zshrc&#xff09;中添加以下内容&#xff1a;export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...

(面试必看!)锁策略

文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁&#xff08;Pessimistic Locking&#xff09;2、乐观锁&#xff08;Optimistic Locking&#xff09;3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...

RAGflow:开源AI框架的创新与应用

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域&#xff0c;AI的应用更是无处不在。今天&#xff0c;我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...

AI的学习明确路径

1.不要一开始学习数学。 首先&#xff0c;学习python的语法和工具包。 python的工具包有&#xff1a;numpy,pandas,matlap,sciklt-learn. 然后&#xff0c;学习机械学习算法&#xff0c;学习1.树模型&#xff0c;随机森林 。 2.神经网络。 上kaggle中&#xff0c;找人家的经…...

【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间 本章将分享缺省参数与函数重载相关知识&#xff0c;为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1…...

mysql排查死锁的几个查询sql

SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...

快速部署私有化大模型 毕昇(使用docker-compose方式)

docker安装 1. # Linux系统安装docker&#xff0c;以CentOS/RHEL为例&#xff0c;其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装&#xff0c;先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...

B端:导航条就框架提供的默认样式吗?非也,看过来。

导航条不一定必须使用框架提供的默认样式&#xff0c;你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件&#xff0c;你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们&#xff0c;可以让设…...

idea的git与SVN切换

1、选择setting->Version Control&#xff0c;新增或者编辑&#xff0c;选择目录&#xff0c;使用git或者svn管理 2、选择项目中的vcs.xml,打开选择要用的&#xff0c;注释掉不用的版本即可...

互联网家政小程序,为大众带来高效、便捷的服务

随着人口老龄化的严重和社会生活节奏的加快&#xff0c;大众对家政服务的需求日益增加&#xff0c;家政行业的市场规模逐渐扩大&#xff01; 在科技的推动下&#xff0c;家政行业开始向数字化发展&#xff0c;“互联网家政”的模式推动了市场的快速发展。互联网家政小程序借助…...

【常用库】【pytorch】基本部件

基本元件 1. 卷积 2. batchnorm loss函数 torch.nn.MSELoss() >>> a torch.rand(3) >>> a tensor([0.2161, 0.2227, 0.9175]) >>> b torch.rand(3) >>> b tensor([0.6976, 0.9149, 0.4918]) >>> mse torch.nn.MSELOSS() &…...

深入Scrapy框架:掌握其工作流程

深入Scrapy框架&#xff1a;掌握其工作流程 引言 作为一名资深的Python程序员&#xff0c;我对各种数据采集工具有着深刻的理解。Scrapy&#xff0c;作为一个上场率极高的爬虫框架&#xff0c;以其高效、灵活和强大的特性&#xff0c;成为数据采集领域的不二选择。在本文中&a…...

从零开始学习机器学习,掌握AI未来的关键!

从零开始学习机器学习 1. 介绍1.1 人工智能&#xff08;AI&#xff09;概述1.2 机器学习在人工智能中的应用1.3 机器学习基础概念 2. 监督学习2.1 什么是监督学习2.2 回归分析2.3 分类问题2.4 模型评估和选择 3. 无监督学习3.1 什么是无监督学习3.2 聚类算法3.3 降维技术 4. 深…...

CI/CD(持续集成/持续部署)

CI/CD(持续集成/持续部署)是软件开发过程中的一种方法,旨在提高开发效率和软件质量。以下是对CI/CD的具体解释: 1.持续集成(Continuous Integration,CI): 概念:开发人员将代码频繁地合并到主分支中,每次提交都会触发自动化构建和测试过程。目的:及时发现和修复集成…...

实现字母的大小写转换。多组输入输出(c语言)

1.我们先输入字母&#xff08;用getchar的函数&#xff09;&#xff0c;判断是不是字母&#xff0c;我们可以用a<tmp<z或者A<tmp<Z,注意&#xff1a;小写转换大写用tmp-32&#xff0c;大写转换小写用tmp32.. #include<stdio.h> int main() {int a 0;while …...

2024华为OD机试真题-最小矩阵宽度Python-C卷D卷-200分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 给定一个矩阵,包含 N * M 个整数,和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N,M,表示矩阵大小。 接下来 N …...

【Vue3】标签的 ref 属性

【Vue3】标签的 ref 属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。…...

llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估

背景 最近在做大模型微调训练的评估&#xff0c;每次都要手动训练大模型&#xff0c;手动评估。 发现这样太浪费时间了&#xff0c;于是就尝试着使用linux shell 脚本&#xff0c;利用 for 循环自动实现大模型的训练、部署与评估。 实验&#xff1a;在不同的文本分类数据集尺…...

python安全脚本编写之流量泛洪

多线程与流量泛洪 并发操作 如果一个单核的cpu&#xff0c;是并不存在严格意义的并发&#xff0c;只是因为处理时间极短&#xff0c;所以感觉上是并发操作的。 针对多核CPU&#xff0c;4核CPU&#xff0c;严格意义上的并发处理是4个 线程和进程 每一个应用程序&#xff0c;至少…...

手把手教你用STM32驱动迪文屏:从RS232配置到页面控件交互全流程

STM32与迪文屏深度开发实战&#xff1a;工业级GUI交互全解析 迪文屏作为工业控制领域广泛采用的HMI解决方案&#xff0c;其与STM32的协同工作能力已成为嵌入式开发者的必备技能。不同于传统TFT-LCD的简单驱动&#xff0c;迪文屏通过串口协议实现的动态交互&#xff0c;为设备控…...

电磁学核心概念与解题框架精讲(猴博士风格)

1. 电磁学基础概念拆解&#xff1a;从场强到电势 电场强度E和电势U是电磁学中最基础的两个物理量&#xff0c;就像描述一个人需要身高和体重两个指标一样。很多同学刚开始学电磁学时容易混淆这两个概念&#xff0c;我用一个简单的类比帮大家理解&#xff1a;想象电场强度就像山…...

Java中灵活转换日期时间字符串格式的教程

本教程详细介绍了如何使用Java Java8及更高版本.time API&#xff0c;准确地将各种不同格式的日期时间字符串转换为统一”DD.MM.YYYY“格式。本文强调了现代日期时间API的优势&#xff0c;分析了Datetimeformater模式符号的正确使用&#xff0c;并提供了完整的示例代码和最佳实…...

告别Linux卡顿!用RK3562的M0核跑RT-Thread,实现实时控制与Linux并行运行

RK3562多核异构开发实战&#xff1a;用M0核实现Linux与RT-Thread的完美协同 在智能家居控制器项目中&#xff0c;我们遇到了一个典型难题——当Linux系统处理图形界面和网络通信时&#xff0c;电机的实时控制会出现明显延迟。传统解决方案需要两套独立硬件&#xff0c;直到我们…...

保姆级拆解:MIT-BEVFusion中Swin Transformer如何高效处理多相机图像(附代码逐行分析)

多相机BEV感知中的Swin Transformer实战&#xff1a;从原理到MIT-BEVFusion代码精要 在自动驾驶感知系统中&#xff0c;如何高效处理多相机输入并构建统一的鸟瞰视图&#xff08;BEV&#xff09;表征一直是核心挑战。本文将深入探讨Swin Transformer在多相机BEV感知中的创新应用…...

7个web.py代码重构技巧:如何快速优化Python Web应用代码结构

7个web.py代码重构技巧&#xff1a;如何快速优化Python Web应用代码结构 【免费下载链接】webpy web.py is a web framework for python that is as simple as it is powerful. 项目地址: https://gitcode.com/gh_mirrors/we/webpy web.py 是一个简单而强大的 Python W…...

告别两两配对!用Fast3R Transformer一次搞定1000张图的多视角重建(保姆级原理解读)

Fast3R Transformer&#xff1a;颠覆多视角重建的并行化革命 想象一下&#xff0c;你面前摆着1000张从不同角度拍摄的埃菲尔铁塔照片。传统方法需要将这些照片两两配对&#xff0c;进行数百万次重复计算&#xff0c;而Fast3R只需一次前向传播就能完成所有视角的联合重建——这就…...

Crossplane认证考试指南:备考资源与实战题解析

Crossplane认证考试指南&#xff1a;备考资源与实战题解析 【免费下载链接】crossplane Crossplane 是一个开源的资源抽象层&#xff0c;用于管理多云计算资源&#xff0c;支持混合云和多云环境。 * 资源抽象层、多云和混合云环境管理 * 有什么特点&#xff1a;支持多种云服务提…...

Spring Boot新手必看:从零搭建Web项目的5个关键步骤(附常见报错解决方案)

Spring Boot新手实战指南&#xff1a;从零构建Web应用的完整路线图 为什么选择Spring Boot作为你的第一个Java Web框架&#xff1f; 当你第一次接触Java Web开发时&#xff0c;面对众多框架的选择可能会感到迷茫。Spring Boot之所以成为大多数开发者的首选&#xff0c;是因为…...

从PTA天梯赛L1真题看起:新手如何用C++快速搞定编程竞赛里的“送分题”?

从PTA天梯赛L1真题看起&#xff1a;新手如何用C快速搞定编程竞赛里的“送分题”&#xff1f; 第一次参加编程竞赛的新手&#xff0c;面对屏幕上密密麻麻的题目&#xff0c;往往会感到无从下手。但仔细观察历届PTA天梯赛L1级别的题目&#xff0c;你会发现一个有趣的现象——总有…...