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

相关推荐
apocelipes3 小时前
golang unique包和字符串内部化
java·python·性能优化·golang
Full Stack Developme4 小时前
java.text 包详解
java·开发语言·python
刘梦凡呀5 小时前
C#获取钉钉平台考勤记录
java·c#·钉钉
best_virtuoso5 小时前
PostgreSQL 常见数组操作函数语法、功能
java·数据结构·postgresql
yudiandian20145 小时前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
楚韵天工6 小时前
宠物服务平台(程序+文档)
java·网络·数据库·spring cloud·编辑器·intellij-idea·宠物
helloworddm6 小时前
Orleans Stream SubscriptionId 生成机制详解
java·系统架构·c#
失散136 小时前
分布式专题——43 ElasticSearch概述
java·分布式·elasticsearch·架构
ajsbxi6 小时前
【Java 基础】核心知识点梳理
java·开发语言·笔记
聪明的笨猪猪6 小时前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试