当前位置: 首页 > article >正文

基于JDK的LRU算法实现

  1. 缓存淘汰算法LRU算法,最近最少使用

  2. 根据数据的历史访问记录来进行淘汰数据,其核心思想是如果数据最近被访问过,那么将来被访问的几率也更高

  3. 在java中的LRU算法,主要利用的是LinkedHshMap容器

  4. LRU算法实现

    1. LinkedHashMap底层就使用HashMap加双链表来实现的,而且本身已经实现了按照访问顺序的存储

    2. LinkedHashMap中本身就实现了一个方案removeEldestEntry用于判断是否需要移除最不常读取的数,方法默认是直接返回false,不会移除元素

    3. 因此需要重写这个方法,可以实现当缓存满了之后,就移除最不常用的数据

    4. public calss LruCache<K,V> extends LinkedHashMap<K,V>{
          private int size;
          
          public LruCache(int size){
              super(size,0.75f,true);
              this.size = size;
          }
          
          @Override
          protected boolean removeEldestEntry(Map.Entry<K,V> eldest){
              //当元素个数,超过指定的大小时,淘汰最老的数据
              return size() >size;
          }
          public static void main(String[] args){
              LruCache<String,Integer> cache = new LruCache<>(4);
              for(int i=0; i<8; i++){
                  if(i==6){
                      cache.get("lpy_2");
                  }
                  cache.put("lpy_"+i,i);
                  System.out.println(i+":"+cache);
              }
              System.out.println(cache.size);
          }
      }
      
    5. 当I==6时,主动访问了一下lpy_2,主要就是不希望淘汰他


http://www.kler.cn/news/358324.html

相关文章:

  • 现今 CSS3 最强二维布局系统 Grid 网格布局
  • 国家信息安全水平考试(NISP一级)最新题库-第十六章
  • 11 图书借阅功能实现(Vue3+element plus +Spring Boot)
  • Windows上安装Go并配置环境变量(图文步骤)
  • Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库
  • Java进阶之路:构造方法
  • C++STL--------list
  • 线性代数基础02
  • HarmonyOS开发(ArkUI简单使用)
  • 【配色网站分享】
  • 掘金2.计算位置 x 到 y 的最少步数(简单01)
  • 【VUE】Vue渲染列表为什么要加key
  • 第 6 章 机器人系统仿真
  • 「OC」YYModel的使用方式
  • QT<28> Qt中对.ini配置文件的读写
  • 使用 Go 构建一个最小的 API 应用
  • Python进阶语法
  • go基础(一)
  • Tars RPC源码--C++客户端
  • jmeter中发送post请求遇到的问题