本文主要是介绍LRU缓存实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
import java.util.LinkedHashMap;
import java.util.Map;public class LRUAssessOrder {Map<Integer, Integer> linkedHashMap;int capacity;public LRUAssessOrder(int capacity) {this.capacity = capacity;/*** accessOrder 根据访问频率进行排序,最新被访问的数据放在链表尾部,最老的数据放在链表头部*/linkedHashMap = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {@Overrideprotected boolean removeEldestEntry(Map.Entry eldest) {if (size() > capacity) {return true;}return false;}// 如果没有查到value,返回-1@Overridepublic Integer get(Object key) {return super.get(key) == null ? -1 : super.get(key);}};}public int get(int key) {return linkedHashMap.get(key);}public void put(int key, int value) {linkedHashMap.put(key, value);}public static void main(String[] args) {LRUAssessOrder cache = new LRUAssessOrder(2);cache.put(1, 1);cache.put(2, 2);cache.get(1); // 返回 1cache.put(3, 3); // 该操作会使得密钥 2 作废cache.get(2); // 返回 -1 (未找到)cache.put(4, 4); // 该操作会使得密钥 1 作废cache.get(1); // 返回 -1 (未找到)cache.get(3); // 返回 3cache.get(4); // 返回 4}}
这篇关于LRU缓存实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!