LRU 算法
LRU 是一种作为缓存的算法,像 CPU 缓存,数据库缓存,浏览器缓存。以及在移动端开发时的图片安缓存,采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法,常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)。
下面就来一起实现一下 LRU 算法。
实现
主要思路:采用链式结构,越早加入到链中数据,顺序越靠近尾部,后来加入的数据添加到头部。
当开始需要访问数据时,先遍历链表,分两种情况:
(1)存在数据
- 数据在头部,则直接返回,不需要做操作
- 数据不在头部,将数据移动到头部(注意在尾部的情况)
(2)不存在数据
- 达到达到最大容量,删除尾部的一个元素,然后添加新元素到头部
- 未达到最大容量,直接添加到新元素到头部
public class LRUList<T> {
private static final int DEFAULT_SIZE =