实现代码如下:
import java.util.LinkedHashMap; import java.util.Map; /** * LRU (Least Recently Used) 算法的Java实现 * @param <K> * @param <V> * @author 杨尚川 */ public class LRUCache<K, V> extends LinkedHashMap<K, V> { //缓存大小 private int cacheSize; public LRUCache(int cacheSize) { //第三个参数true是关键 super(10, 0.75f, true); this.cacheSize = cacheSize; } /** * 缓存是否已满的判断 * @param eldest * @return */ @Override protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { boolean r = size() > cacheSize; if(r){ System.out.println("清除缓存:"+eldest.getKey()); } return r; } public static void main(String[] args) { LRUCache<String, String> cache = new LRUCache<>(5); cache.put("1", "1"); cache.put("2", "2"); cache.put("3", "3"); cache.put("4", "4"); cache.put("5", "5"); System.out.println("初始:"); cache.keySet().forEach(k -> System.out.println(k)); System.out.println("访问2:"); cache.get("2"); cache.keySet().forEach(k -> System.out.println(k)); System.out.println("访问2、3:"); cache.get("2"); cache.get("3"); cache.keySet().forEach(k -> System.out.println(k)); System.out.println("增加数据6、7:"); cache.put("6", "6"); cache.put("7", "7"); cache.keySet().forEach(k -> System.out.println(k)); } }
运行结果如下:
初始: 1 2 3 4 5 访问2: 1 3 4 5 2 访问2、3: 1 4 5 2 3 增加数据6、7: 清除缓存:1 清除缓存:4 5 2 3 6 7
时间: 2024-12-13 11:25:55