146. LRU 缓存
主要是利用LinkedHashMap的功能
LinkedHashMap继承了HashMap
学到了LinkedHashMap维护双向链表的方法
LinkedHashMap的Entry加入了一个before和after,用于维护Entry的加入顺序。
next维护各个桶的顺序。
回忆LinkedHashMap源码记得看:
https://blog.csdn.net/weixin_45864705/article/details/127145695

class LRUCache { int cap; LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>(); public LRUCache(int capacity) { this.cap = capacity; } public int get(int key) { if (!cache.containsKey(key)) { return -1; } makeRecently(key); return cache.get(key); } public void put(int key, int val) { if (cache.containsKey(key)) { cache.put(key, val); makeRecently(key); return; }
//使用keySet方法获得所有key的集合,因为LinkedHashMap是一个有序的集合,所以会显示链表第一个key,然后使用iterator迭代器获取key集合,调用next方法获取第一个key对应的value。 if (cache.size() >= this.cap) { int oldestKey = cache.keySet().iterator().next(); cache.remove(oldestKey); } cache.put(key, val); } private void makeRecently(int key) { int val = cache.get(key); cache.remove(key); cache.put(key, val); } }
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号