leetcode146 LRU缓存机制(java)

本文介绍了一种使用Java中的LinkedHashMap实现LRU缓存机制的方法。通过设置accessOrder参数,可以确保最近最少使用的项被移除。文章提供了一个完整的LRUCache类实现,包括get和put方法,展示了如何在容量受限的情况下维护一个高效的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LRU缓存机制
题意:构造一个有LRU缓存机制的容器即写一个类并实现get和put
通过jdk中的LinkedHashMap中的构造函数我们可以发现,jdk已经实现了LRU这一机制了

LinedHashMap的构造函数如下:

public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);
        this.accessOrder = accessOrder;
    }

我们可以根据设置accessOrder变量来实现容器的LRU机制,对get和put的实现也是基于这一机制
代码如下:

package com.ischen.demo.utils.leetcode;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;

/**
 * @Author:ischen
 * @Date 2019/7/29 10:18
 * @Describe
 */
public class LRUCache {
    HashMap<Integer,Integer> map;
    int size;
    public LRUCache(int capacity) {
        size = capacity;
        map = new LinkedHashMap<Integer, Integer>(capacity,0.75f,true);
    }

    public int get(int key) {
        return map.containsKey(key)?map.get(key):-1;
    }

    public void put(int key, int value) {
        if(map.containsKey(key)){
            map.put(key,value);
            return;
        }
        if(map.size()>=size){
            Iterator<Integer> i = map.keySet().iterator();
            if(i.hasNext()){
                map.remove(i.next());
            }
        }
        map.put(key,value);
    }

    public static void main(String[] args) {
        LRUCache cache = new LRUCache(2);
        System.out.println(cache.get(2));
        cache.put(2,6);
        System.out.println(cache.get(1));
        cache.put(1,5);
        cache.put(1,2);
        System.out.println(cache.get(1));
        System.out.println(cache.get(2));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值