算法笔记:力扣146.LRU缓存

本题关键思路:当访问一个key后,就移动该key到最前面的位置或者最后面的位置,那么另一端最后一个元素就是最近最久没有访问的元素。而LinkedHashMap就是可以按照访问顺序来移动元素。

复制代码
class LRUCache {

    int cap=0;
   // HashMap<Integer,Integer> map=new HashMap<>();
    LinkedHashMap<Integer,Integer> map=null;
    //LinkedHashMap:有顺序的map 相当于hashmap+双向链表 三个参数cap 负载因子 是否按顺序排列
    //当调用一次get访问元素后 那么该元素就会放到最后

    public LRUCache(int capacity) {
        //这一步是初始化容量  表示最多存几个元素 也就是几个key
        //思路 通过一个hashmap来存放key
        this.cap=capacity;
        map=new LinkedHashMap<>(cap,0.75f,true); //对map进行初始化
    }
    
    public int get(int key) {
    return    map.getOrDefault(key,-1); //如果找到key 则返回对应的值 如果没找到则返回-1

    }
    
    public void put(int key, int value) {
        //put key和对应的value值
        //1.put元素首先要检查是否已经容量满了
        if(map.containsKey(key)){ //表示重复元素直接覆盖
            map.put(key,value);
            return;
        }
        
        if(map.size()>=cap){//表示已经满了
            //就要踢出使用得最少的 
            //LinkedHashMap的规则就是 当使用get方法后 会将get的key放到最后面 那么最前面的就是访问最少的
            for(Map.Entry<Integer,Integer> entry:map.entrySet()){
                int minkey=entry.getKey();//第一个key就是最近访问最少的
                //这里要注意put的元素是不是重复的 如果是重复元素则不需要删除
                map.remove(minkey);
                break;
            }

        }
            //然后添加元素
            map.put(key,value);
          
        }

    }
相关推荐
YLCHUP35 分钟前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
旖旎夜光2 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
Pniubi3 小时前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
nice_lcj5203 小时前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
文丑颜不良啊4 小时前
LeetCode2741~2760题目解析
java·leetcode
俊俊几年的4 小时前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
星恒随风13 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
2603_9696948516 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea16 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
Go Work20 小时前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记