Java使用泛型写一个LRU缓存

2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》,探讨了大模型赋能下的研发变革及如何在公司和行业中落地,AI原生研发新范式的内涵和推动经验。

👉点击阅读文章完整内容

👉点击即可下载《百度AI原生研发新范式实践》完整资料

🔍【大厂面试真题】系列,带你攻克大厂面试真题,秒变offer收割机!

❓今日问题:Java使用泛型写一个LRU缓存

❤️一起看看文心快码Baidu Comate给出的答案吧!如果这个问题你也会,也可以在评论区写出你的答案哦~

复制代码
@comate

在Java中,使用泛型和LinkedHashMap类可以很容易地实现一个LRU(最近最少使用)缓存。下面是一个简单的示例,展示如何使用泛型和LinkedHashMap来创建一个LRU缓存类:
import java.util.LinkedHashMap;
import java.util.Map;

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

    public LRUCache(int capacity) {
        // 第三个参数true表示让LinkedHashMap按照访问顺序来进行排序,最近访问的放在头部,最老访问的放在尾部。
        super(capacity, 0.75f, true);
        this.capacity = capacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        // 当map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据。
        return size() > capacity;
    }
}

这个LRUCache类继承自LinkedHashMap,并重写了removeEldestEntry方法。当LinkedHashMap中的元素数量超过指定的容量时,removeEldestEntry方法会被调用,从而删除最老的元素(即最近最少使用的元素)。

你可以这样使用这个LRU缓存:
public static void main(String[] args) {
    LRUCache<Integer, String> cache = new LRUCache<>(3);
    cache.put(1, "one");
    cache.put(2, "two");
    cache.put(3, "three");
    System.out.println(cache.keySet()); // 输出 [3, 2, 1]
    cache.get(1);
    System.out.println(cache.keySet()); // 输出 [1, 3, 2]
    cache.put(4, "four"); // 此时会移除键为2的条目
    System.out.println(cache.keySet()); // 输出 [4, 1, 3]
}
这个示例创建了一个容量为3的LRU缓存,并演示了如何添加、获取和移除元素。注意,当缓存达到其容量限制时,最近最少使用的元素将被自动移除。
相关推荐
weisian1515 分钟前
基础篇--概念原理-1-Token是什么?——从原理到实战,一篇讲透
人工智能·职场和发展·token
大模型最新论文速读9 分钟前
Select to Think:蒸馏 token 排序能力,效果平均提升24%
论文阅读·人工智能·深度学习·机器学习·自然语言处理
李崧正11 分钟前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命13 分钟前
鳶尾花項目JAVA
java·开发语言·机器学习
BIGmustang15 分钟前
python练手之用tkinter写一个计算器
开发语言·python
无忧智库21 分钟前
跨行业数据要素可信流通体系建设:打破信任壁垒的完整工程方法论(WORD)
大数据·人工智能
mit6.82421 分钟前
NitroGen: AI 自动玩游戏
人工智能
小王毕业啦23 分钟前
2007-2024年 省级-农林牧渔总产值、农业总产值数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
winner888123 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
数据皮皮侠25 分钟前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造