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

基于LinkedhashMap实现的LRU算法

LRU全称是Least Recently Used,即最近最久未使用的意思。
LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。
解决的实际问题:当做数据缓存时,缓存的数据会随着时间的推移越来越多,如果没有缓存清除策略,那么会出现俩个问题:1、缓存越来越大挤爆内存。2、很多不使用的数据占据这内存空间,导致内存得不到有效利用。
此场景使用LRU算法非常合适。
LRU算法的主要思想:

  1.设置一个缓存阈值,超过阈值删除最老的数据。

  2.保证最老的数据总是在链表的头部,最新的数据总是在尾部,这样每次需要删除数据时把头部数据删除即可。

linkedHashMap对LRU算法的实现:

import java.util.LinkedHashMap;
import java.util.Map;public class LRU<K,V> extends LinkedHashMap<K, V> implements Map<K, V>{// private static final long serialVersionUID = 1L;public LRU(int initialCapacity,float loadFactor,boolean accessOrder) {super(initialCapacity, loadFactor, accessOrder);}/** * @description 重写LinkedHashMap中的removeEldestEntry方法,当LRU中元素多余6个时,*              删除最不经常使用的元素* @author daoshao       * @param eldest* @return     * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)     */  @Overrideprotected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {// TODO Auto-generated method stubif(size() > 6){return true;}return false;}public static void main(String[] args) {LRU<Character, Integer> lru = new LRU<Character, Integer>(16, 0.75f, true);String s = "abcdefghijkl";for (int i = 0; i < s.length(); i++) {lru.put(s.charAt(i), i);}System.out.println("LRU中key为h的Entry的值为: " + lru.get('h'));System.out.println("LRU的大小 :" + lru.size());System.out.println("LRU :" + lru);}
}

 

 

转载于:https://www.cnblogs.com/Young111/p/11470856.html

http://www.lryc.cn/news/2415759.html

相关文章:

  • 【高级部署】-Kubernetes K8S理论篇
  • JavaScript:求学生成绩案例及错误分析。
  • linux就该这么学pdf+下载链接
  • 在Esri官网申请60天试用版 ArcGIS Desktop(过期)
  • informix的一些函数,时间
  • H.266资料网站
  • 热点博客,技术历程和技术积累 (个人)
  • 人脸识别方案选择
  • Web前端学习路线,超全面整理「HTML+CSS+JS+Ajax+jQuery+VUE
  • 网络视频会议 OpenMeetings 介绍 运行 开发
  • 【STM32】嵌入式(片上)Flash的读写(以STM32F407ZGT6为例,HAL库)
  • VMware vCenter/vSphere/vSan/Esxi/7.0 lic许可
  • godaddy又支持支付宝支付了。今天backorder了一个域名,尝试用支付宝支付。居然可以支付了。当时的汇率结算。...
  • java快速培训
  • Java中常用的代码汇总
  • 文本框限制只能输入数字、汉子、字母的方法
  • ShopNC多用户商城系统,B2B2C企业级电商平台
  • 果然,ChatGPT还是被拿去搞黄色了...
  • 奥特曼在银行里下象棋的梗
  • 空指针解引用(nullpointer dereference)_空指针解引用分析
  • SAP MM 存储条件 - Room Temperature Vs Ambient
  • 启动IIS 发生意外错误0x8ffe2740
  • 如何零基础制作一款自己的游戏!(一)
  • 用html画一颗圣诞树
  • MapInfo7.0序列号和许可文件
  • 用NetBeans进行JavaFX 开发(一) 入门篇
  • 微信小程序开发中的用户数据统计与分析
  • IOS15升级教程
  • CRMEB商城系统营销功能解读——秒杀功能
  • 2014台州学院ACM集训队寒假练习赛1