Java使用LinkedHashMap实现LRU淘汰算法

什么是LRU

LRU 是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法。

在一般标准的操作系统教材里,会用下面的方式来演示 LRU 原理,假设内存只能容纳3个页大小,按照 7 0 1 2 0 3 0 4 的次序访问页。假设内存按照栈的方式来描述访问时间,在上面的,是最近访问的,在下面的是,最远时间访问的,LRU就是这样工作的。

 

LRU示意图

那么Java中如何实现一个LRU算法呢。

LinkedHashMap

LinkedHashMap是维护了双向链表的HashMap,保持了插入元素的顺序。

LinkedHashMap提供了一个钩子方法,在新插入元素后可以决定是否删除最老的元素。

 

/**
     * LRU中最大元素数量
     */
    private int maxSize;

    public LRUByLinkedHashMap(int maxSize) {
        // 容量为最大值/0.75,即最大负载容量为maxSize
        // accessOrder=true  根据查询排序,即最近被使用的放到后面
        super((int) Math.ceil(maxSize / 0.75) + 1, 0.75f, true);
        this.maxSize = maxSize;
    }

    /**
     * 此方法为钩子方法,map插入元素时会调用此方法
     * 此方法返回true则证明删除最老的因子
     *
     * @param eldest
     * @return
     */
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > maxSize;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值