首页 > 其他分享 >利用LinkedHashMap实现简单的LRU

利用LinkedHashMap实现简单的LRU

时间:2024-04-10 09:59:38浏览次数:13  
标签:get cache LRU Assertions 简单 put maxCapacity LinkedHashMap

利用LinkedHashMap进行重写,实现LRU作为缓存字典

1、代码实现

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

/**
 * 利用LinkedHashMap进行重写,实现LRU作为缓存字典
 *
 * @param <K> key
 * @param <V> value
 * @date 2024-04-10 09:42
 **/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    /**
     * 最大容量
     */
    private final int maxCapacity;

    public LRUCache(int maxCapacity) {
        super(maxCapacity, 0.75F, true);
        this.maxCapacity = maxCapacity;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        // 大于最大容量maxCapacity时,移除最前元素
        return super.size() > maxCapacity;
    }
}

2、测试

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class LRUCacheTest {
    @Test
    public void testLru() {
        // 最大容量为3
        LRUCache<Integer, Integer> cache = new LRUCache<>(3);
        cache.put(0, 0);
        cache.put(1, 1);
        cache.put(2, 2);
        cache.put(3, 3);    // 该操作会使得密钥 0 作废
        Assertions.assertNull(cache.get(0));

        cache.put(4, 4);    // 该操作会使得密钥 1 作废
        Assertions.assertNull(cache.get(1));
        Assertions.assertEquals(3, cache.size());
        Assertions.assertEquals(2, cache.get(2));
        Assertions.assertEquals(3, cache.get(3));
        Assertions.assertEquals(4, cache.get(4));
    }
}

标签:get,cache,LRU,Assertions,简单,put,maxCapacity,LinkedHashMap
From: https://blog.csdn.net/yyp0719/article/details/137584538

相关文章

  • 最简单的 FLV 封装格式解析程序
    最简单的FLV封装格式解析程序最简单的FLV封装格式解析程序原理源程序结果下载链接参考最简单的FLV封装格式解析程序参考雷霄骅博士的文章:视音频数据处理入门:FLV封装格式解析本文中的程序是一个FLV封装格式解析程序。该程序可以从FLV中分析得到它的基本单元Ta......
  • 简单的四则运算生成器代码
     以下是python代码importrandomdefa():num1=random.randint(1,100)num2=random.randint(1,100)operator=random.choice(['+','-','*','/'])#如果是除法操作,确保分母不为零ifoperator=='/'......
  • 一个简单的 indexedDB 应用示例
    现代浏览器中会包含indexedDB,这是一个功能比localStorage更加强大的数据库引擎,其API描述详见W3规范:IndexedDB如下是一个简单的应用示例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content=......
  • lightdash 与dbt集成的玩法简单说明
    lightdash是依赖dbt进行建模的bi工具,以下说明下lightdash是如何集成dbt的简单操作流程如下,主要是安装cli,预处理表,然后创建项目内部处理简单说明packages/cli/src/index.ts代码位置,主要是通过自定义一些dbt的meta信息,然后通过包装的dbtrun命令执行模型的创建(此处lig......
  • YOLOv8 测试 4:在 Linux 中使用 Docker 部署 YOLOv8 模型,并使用简单的命令行脚本测试模
    一、前言记录时间[2024-4-9]系列文章简摘:YOLOv8模型的简单测试,Windows环境下安装部署(Python+PyTorch+Conda+cpu+CLI)YOLOv8模型的简单测试2,PyCharm集成开发环境安装使用(Windows+Python+PyTorch+Conda+cpu)Win11中安装虚拟化软件VMware,以及Linux虚拟机的详细安装......
  • ES查询之简单查询、DSL查询、match和term查询
    目录前言一、Elasticsearch之查询的两种方式1.1准备数据1.2字符串方式查询(简单查询)1.3DSL方式查询二、match与term系列查询2.1match系列查询2.1.1准备数据2.1.2match(按条件查询)2.1.3match_all(查询全部)2.1.4match_phrase(短语查询)2.1.5match_phrase_prefix(最左前缀查询)2.1.......
  • 大话设计模式-简单工厂模式
    简单工厂模式面向对象和面向过程在大话设计模式中,为了引出简单工厂模式这一个话题,作者举了一个计算器的例子,通过不断的去优化计算器功能的实现代码,来帮助我们理解面向对象这一概念。首先是初始的代码,逻辑简单明了,是面向过程的方法去解决的,用计算机的方式去思考问题,直接判断输......
  • 一个简单的Java程序,结合HTML页面,用于随机抽取人员
    importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importjava.util.Scanner;publicclassRandomNamePicker{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);List<String&g......
  • 【简单讲解下PHP AES加解密示例】
    ......
  • 【简单讲解下C++max函数的使用】
    ......