文心快码进入3.0时代, 最新发布的代码问答、编码、Debug、单测、安全智能体, 分别在开发的设计、编码、构建、测试验证全流程通过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缓存,并演示了如何添加、获取和移除元素。注意,当缓存达到其容量限制时,最近最少使用的元素将被自动移除。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。