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),则会移除最近最少使用的元素。

相关推荐
Tao____6 小时前
开源物联网平台
java·物联网·mqtt·开源·设备对接
遇到困难睡大觉哈哈7 小时前
Harmony os——ArkTS 语言笔记(四):类、对象、接口和抽象类
java·笔记·spring·harmonyos·鸿蒙
拿破轮7 小时前
使用通义灵码解决复杂正则表达式替换字符串的问题.
java·服务器·前端
j***51897 小时前
Java进阶,时间与日期,包装类,正则表达式
java·mysql·正则表达式
WZTTMoon7 小时前
Spring Boot 启动全解析:4 大关键动作 + 底层逻辑
java·spring boot·后端
章鱼哥7307 小时前
[特殊字符] SpringBoot 自定义系统健康检测:数据库、Redis、表统计、更新时长、系统性能全链路监控
java·数据库·redis
深圳佛手8 小时前
Sharding-JDBC 和 Sharding-Proxy 区别
java
kk哥88998 小时前
inout参数传递机制的底层原理是什么?
java·开发语言
小二·8 小时前
Spring框架入门:深入理解Spring DI的注入方式
java·后端·spring