美文网首页Java笔试面试Java面试题总结
Java怎么实现LRU缓存(最近最少使用)

Java怎么实现LRU缓存(最近最少使用)

作者: 小北觅 | 来源:发表于2018-09-21 15:39 被阅读9次

LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉,废话不多说,下面来说下Java版的LRU缓存实现。

使用LinkedHashMap实现

LinkedHashMap自身已经实现了顺序存储,默认情况下是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据放在最后面,然后它还有一个判断是否删除最老数据的方法removeEldestEntry,默认是返回false,即不删除数据,我们使用LinkedHashMap实现LRU缓存的方法就是对LinkedHashMap实现简单的扩展,重写一下这个方法。

package cn.lzrabbit.structure.lru;

import java.util.LinkedHashMap;
import java.util.Map;


public class LRUCache2<K, V> extends LinkedHashMap<K, V> {
    private final int MAX_CACHE_SIZE;

    public LRUCache2(int cacheSize) {
        ////LinkedHashMap的一个构造函数,当参数accessOrder为true时,即会按照访问顺序排序,最近访问的放在最前,最早访问的放在后面
        super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
        MAX_CACHE_SIZE = cacheSize;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_CACHE_SIZE;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<K, V> entry : entrySet()) {
            sb.append(String.format("%s:%s ", entry.getKey(), entry.getValue()));
        }
        return sb.toString();
    }
}

测试

package com.cachelru;

public class Main {
    public static void main(String[] args) {
        Cache<Integer, String> cache = new Cache<Integer, String>(4);
        
        for (int i = 0; i < 6; i++) {
            cache.put(i, ""+i);
            cache.get(i+1);
        }       
        System.out.println(cache.toString());
    }   
}

https://www.cnblogs.com/lzrabbit/p/3734850.html

相关文章

  • Java怎么实现LRU缓存(最近最少使用)

    LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实...

  • LeetCode 146. LRU缓存机制(LRU Cache)

    146. LRU缓存机制 Python3 实现 LRU(最近最少使用) 缓存机制 更多可参见:https://en...

  • LeetCode-146- LRU 缓存机制

    LRU 缓存机制 题目描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 ...

  • 缓存过期算法相关点

    常用缓存过期算法 LRU 最近最少使用 LRU缓存过期算法 最近最少使用的对象最先被删除 原理在Android中,...

  • LRU缓存

    146. LRU缓存 设计和实现一个LRU(最近最少使用)的缓存机制。它可以支持以下操作: get 和 put 。...

  • O(1)时间复杂度内实现LRU简单算法

    LRU算法 LRU(Least Recently Used),即最近最少使用算法。常用于实现一个简单的缓存功能,就...

  • Android源码阅读之LruCache

    LruCache实现原理 介绍 LRU是最近最少使用(Least Recently Used)缓存算法。它需要跟踪...

  • LRU算法

    LRU是最近最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那些最近最少使用的缓存对象。采用LRU算法的缓存有...

  • LeetCode146 动手实现LRU算法

    146. LRU缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持...

  • Android图片缓存之Lru算法

    Lru: LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用...

网友评论

    本文标题:Java怎么实现LRU缓存(最近最少使用)

    本文链接:https://www.haomeiwen.com/subject/urvanftx.html