LinkedHashMap 简单实现LRU

要使用 LinkedHashMap 来实现LRU(最近最少使用)缓存,可以设置它的访问顺序为true,以便在每次访问一个元素时,将它移到最后,从而实现LRU的特性。以下是一个简单的Java示例:

java 复制代码
import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int MAX_CAPACITY;

    public LRUCache(int capacity) {
        super(capacity, 0.75f, true);
        MAX_CAPACITY = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > MAX_CAPACITY;
    }

    public static void main(String[] args) {
        LRUCache<Integer, String> lruCache = new LRUCache<>(3);

        lruCache.put(1, "One");
        lruCache.put(2, "Two");
        lruCache.put(3, "Three");

        System.out.println(lruCache); // 输出: {1=One, 2=Two, 3=Three}

        lruCache.get(2); // 访问元素2

        System.out.println(lruCache); // 输出: {1=One, 3=Three, 2=Two}

        lruCache.put(4, "Four"); // 添加一个新元素

        // 1最先放入
        System.out.println(lruCache); // 输出: {3=Three, 2=Two, 4=Four}

        lruCache.put(5, "Five"); // 添加一个新元素

        // 2先放入但使用了一次,3紧随其后但没有使用
        System.out.println(lruCache); // 输出: {2=Two, 4=Four, 5=Five}
    }
}

在上面的示例中,创建了一个 LRUCache 类,它扩展了 LinkedHashMap,并在构造函数中设置了访问顺序为true,以便实现LRU缓存。重写了 removeEldestEntry 方法,以控制缓存的大小,如果缓存大小超过最大容量(MAX_CAPACITY),则会移除最近最少使用的元素。

相关推荐
nanxun8864 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103516 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师8 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师12 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_012 小时前
mac(m5)平台编译openjdk
java
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程