什么网站需要服务器,摄影学校网站模板,核心关键词举例,网站建设网络科技公司加盟LRU#xff08;Least Recently Used#xff0c;最近最少使用#xff09;缓存是一种缓存淘汰策略#xff0c;用于在缓存满时淘汰最久未使用的元素。
关键#xff1a;
缓存选什么结构#xff1f;
怎么实现访问顺序#xff1f;
import java.util.*;public class LRUCac…LRULeast Recently Used最近最少使用缓存是一种缓存淘汰策略用于在缓存满时淘汰最久未使用的元素。
关键
缓存选什么结构
怎么实现访问顺序
import java.util.*;public class LRUCacheK, V {private final int capacity; // 缓存容量private final MapK, V cache; // 用于存储缓存数据private final LinkedListK order; // 用于维护访问顺序public LRUCache(int capacity) {this.capacity capacity;this.cache new HashMap(capacity);this.order new LinkedList();}public V get(K key) {if (!cache.containsKey(key)) {return null; // 如果缓存中不存在该键返回 null}// 将访问的键移到队列的尾部表示最近使用order.remove(key);order.addLast(key);return cache.get(key);}public void put(K key, V value) {if (cache.containsKey(key)) {// 如果缓存中已经存在该键更新值并将键移到队列的尾部cache.put(key, value);order.remove(key);order.addLast(key);} else {if (cache.size() capacity) {// 如果缓存满了移除最久未使用的键K oldestKey order.removeFirst();cache.remove(oldestKey);}// 添加新键值对到缓存cache.put(key, value);order.addLast(key);}}public static void main(String[] args) {LRUCacheString, String lruCache new LRUCache(3);lruCache.put(1, one);lruCache.put(2, two);lruCache.put(3, three);System.out.println(lruCache.get(1)); // 输出: onelruCache.put(4, four);System.out.println(lruCache.get(2)); // 输出: null (因为2是最久未使用的)}
} 测试讲解
先定义了大小为3的缓存然后存1,2,3此时的访问顺序1-2-3list头部是最早访问的尾部是最晚访问的此时缓存已满然后访问了1则现在的顺序是2-3-1可见2是那个最久没被访问的我再添加新元素4时需要删除的是2顺序变成3-1-4。