算法test011

手撕LRUMap。
解题思路
LinkedList储存key值,实现最近最少使用。
get:
如果存在该key,则先把LinkedList中原来的key值删除,再把key添加到LinkedList末尾,越最近使用的key越靠近LinkedList末尾。
put:

如果存在该key,也要像get一样,先把LinkedList中原来的key值删除,再把key添加到LinkedList末尾,直接调用HashMap的put方法,新的value值就会覆盖旧的value值。
如果put之前元素个数已经达到了容量,则把LinkedList中第一个元素删除,越是最近最少使用的key越靠近LinkedList头部。然后调用HashMap的put方法。
不存在该key,也没有到达容量,直接调用HashMap的put方法。
代码
class LRUCache {
private int capacity;
private HashMap<Integer,Integer> map;
private LinkedList<integer> list;
public LRUCache(int capacity) {
this.capacity=capacity;
map=new HashMap<>();
list=new LinkedList<>();
}</integer>

public int get(int key) {
    if(map.containsKey(key)){
        list.remove((Integer)key);
        list.addLast(key);
        return map.get(key);
    }
    return -1;
}

public void put(int key, int value) {
    if(map.containsKey(key)){
        list.remove((Integer)key);
        list.addLast(key);
        map.put(key,value);
        return;
    }
    if(list.size()==capacity){
        map.remove(list.removeFirst());
        map.put(key,value);
        list.addLast(key);
    }

}
欢迎交流指正~

算法 文章被收录于专栏

根据自己所见所闻进行算法归纳总结

全部评论

相关推荐

05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务