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

相关推荐
不良手残9 分钟前
Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
java·spring boot·redis·后端
YuTaoShao11 分钟前
Java八股文——Spring「Spring 篇」
java·数据库·spring
阿维的博客日记22 分钟前
说一下Java里面线程池的拒绝策略
java·线程池·拒绝策略
快乐肚皮1 小时前
快速排序:分治思想的经典实践
java·算法·排序算法
都叫我大帅哥1 小时前
一文搞懂Java Record:从入门到避坑,解锁高效编程新姿势!
java
hqxstudying1 小时前
Maven的使用
java·maven
shangjg31 小时前
Eureka 心跳续约机制
java·分布式·spring cloud·eureka
Halo_tjn1 小时前
Java IO
java·开发语言
沐土Arvin1 小时前
三次握手建立连接,四次挥手释放连接——TCP协议的核心机制
java·网络·tcp/ip
阿维的博客日记1 小时前
用volatile修饰数组代表什么意思,Java
java·juc·volatile