urlname
type
Post
password
SyncToConfluence
category
编程基础
date
Apr 14, 2024
slug
01HVGJ88AF33PNEZAVB0YPN0G9
icon
Button
catalog
summary
tags
Algorithm
Java
cover
Status
BusyTime
Status 1
status
Published
LRU算法,即“最近最少使用”(Least Recently Used)算法,用来管理内存中的数据缓存。
其核心思想是:当内存不足时,优先淘汰那些最长时间未被访问的数据。
📝 简介
- LRU Cache 指最近最少使用缓存,它是一种常见的缓存管理技术,用于加速数据访问。
- LRU Cache 基于最近使用的记录在缓存中保留一个固定大小的记录集,并剔除最近最少使用的记录。
- 当缓存中的记录数量达到上限时,最早之前被使用的记录会被替换掉。
实现思路
- 维护一个哈希表以及一个双向链表。
- 哈希表用于记录每个记录的位置和值,而双向链表用于记录记录的顺序。
- 当一个新记录被访问时,在哈希表中查找该记录,如果记录存在则将其移动到链表的头部;
- 如果记录不存在,就将其添加到哈希表和链表的头部。
- 如果缓存已满,则将链表的末尾元素从哈希表和链表中移除。
代码实现
基于LinkedHashMap
LinkedHashMap提供了按访问顺序(access-order)排序的功能
基于HashMap
🤗 时间复杂度
以下分析的时间复杂度对上述两种实现都适用
- 哈希表操作 (
HashMap): - 查找(
get,containsKey):平均时间复杂度为 O(1)。 - 插入和删除(
put,remove):平均时间复杂度 O(1)。
- 双向链表操作:
- 移动到头部(
moveToHead)、添加到头部(addToHead):这些操作直接操作链表的头部,时间复杂度为 O(1)。 - 删除节点(
removeNode):时间复杂度也是 O(1) 的,因为每个节点都存储了指向前一个和后一个节点的直接引用。
- 综上,LRU的各种操作,最优的时间复杂度都为 O(1)。
📎 参考文章
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/01HVGJ88AF33PNEZAVB0YPN0G9
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts