软件工程师好找工作吗,做seo比较好的网站,推广代理,手机建筑设计app146. LRU 缓存
解题思路
与普通的 HashMap 不同#xff0c;LinkedHashMap 会保持元素的有序性。这可以在某些情况下提供更可预测的迭代顺序直接获取元素 因为使用到该元素 将该元素重新放入队尾 表示最近使用该元素写入元素#xff0c;首先如果该元素原来存在 那么需要将ke…146. LRU 缓存
解题思路
与普通的 HashMap 不同LinkedHashMap 会保持元素的有序性。这可以在某些情况下提供更可预测的迭代顺序直接获取元素 因为使用到该元素 将该元素重新放入队尾 表示最近使用该元素写入元素首先如果该元素原来存在 那么需要将key变为最近使用 删除队头元素最近没有使用的元素之后写入元素将一个元素变为最近使用的元素就是将元素重新写入队尾 class LRUCache {int cap;// 与普通的 HashMap 不同LinkedHashMap 会保持元素的有序性。这可以在某些情况下提供更可预测的迭代顺序LinkedHashMapInteger,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 value) {if(cache.containsKey(key)){// 修改key的值cache.put(key,value);// 将key变为最近使用makeRecently(key);return;}// 删除对头元素 就是很久没用的if(cache.size() this.cap){// 链表头部就是最久未使用的keyint oldestKey cache.keySet().iterator().next();cache.remove(oldestKey);}cache.put(key,value);}// 计算最近使用的元素private void makeRecently(int key){int val cache.get(key);// 获取元素// 移除keycache.remove(key);// 因为现在使用到该元素 所以将该元素插入队列尾部cache.put(key,val);}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj new LRUCache(capacity);* int param_1 obj.get(key);* obj.put(key,value);*/