JAVA实现LRU算法的参考示例

 更新时间:2020年10月30日 08:59:53   作者:追极  
这篇文章主要介绍了JAVA实现LRU算法的参考示例,帮助大家根据需求实现算法,感兴趣的朋友可以了解下

LRU简介

LRU是Least Recently Used 近期最少使用算法,它就可以将长时间没有被利用的数据进行删除。

实现

最近面了阿里的外包吧,居然也要在线敲代码了,那叫一个紧张啊。题目就是实现一个LRU算法的缓存。外包居然要求也这么高了,哎。还好,LRU是我大学老师布置的一道题目,当然我用C语言实现的,算法原理那是一清二楚,可是面试的时候就脑子一片空白了。好在,边敲代码,边思考,就慢慢想起来了,下面是我的代码。仅供参考

/**
 * 设计和构建一个“最近最少使用”LRU 缓存,该缓存会删除最近最少使用的项目。
 * 缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。
 * 当缓存被填满时,它应该删除最近最少使用的项目。
 * 考虑多线程操作下的操作安全和性能。
 */
public class LRUCache{

 private int maxSize;
 
 /**
 * 存储缓存数据
 */
 private ConcurrentHashMap<String,Object> map = new ConcurrentHashMap<>();
 
 /**
 **存储缓存key列表
 */
 private LinkedList<String> list;
 
 LRUCache(){
 }

 LRUCache(int maxSize){
   this.maxSize = maxSize;
  this.list = new LinkedList<>(maxSize);
 }
 

 /**
 * @param key 缓存key
  @return 缓存值
 */
 synchronized Object getVal(String key){
  //1.从map里取数据
  Object obj = map.get(key);
  
  //2.将key置于list的尾部(表示最近被访问过了)
  if(obj != null){
    addOrRefreshKey(key);
  }
 }
 
 synchronized void putVal(String key,Object val){
   //1.设置val到map中
  
  //2.将key置于list的尾部(表示最近被访问过了)
  
   //3.需要做判断是否list.size()>maxSize。如果满了就删除头部(最近最少使用)的数据后再执行1-2步骤
 }
 
 
 /**
 * 添加或刷新key
 */
 private void addOrRefreshKey(String key){
   this.list.remove(key); //管他三七二十一,先删除掉
  this.list.add(key); //然后添加这个可以,保证key置于list的尾部
 }

 
 
 
}

以上就是JAVA实现LRU算法的参考示例的详细内容,更多关于Java LRU算法的资料请关注脚本之家其它相关文章!

相关文章

  • Mybatis 入门之MyBatis环境搭建(第一篇)

    Mybatis 入门之MyBatis环境搭建(第一篇)

    Mybatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。这篇文章主要介绍了Mybatis入门第一篇之MyBaits环境搭建,需要的朋友参考下
    2016-12-12
  • Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    Java精品项目瑞吉外卖之登陆的完善与退出功能篇

    这篇文章主要为大家详细介绍了java精品项目-瑞吉外卖订餐系统,此项目过大,分为多章独立讲解,本篇内容为新增菜品和分页查询功能的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • MySQL+SSM+Ajax上传图片问题

    MySQL+SSM+Ajax上传图片问题

    本文主要介绍了MySQL+SSM+Ajax上传图片问题。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • SpringBoot的DeferredResult案例:DeferredResult的超时处理方式

    SpringBoot的DeferredResult案例:DeferredResult的超时处理方式

    这篇文章主要介绍了SpringBoot的DeferredResult案例:DeferredResult的超时处理方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java高效实现电商产品排序实战

    Java高效实现电商产品排序实战

    这篇文章主要为大家介绍了Java高效实现电商产品排序实战,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 解决springboot responseentity<string>乱码问题

    解决springboot responseentity<string>乱码问题

    这篇文章主要介绍了解决springboot responseentity<string>乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java TreeSet实现学生按年龄大小和姓名排序的方法示例

    Java TreeSet实现学生按年龄大小和姓名排序的方法示例

    这篇文章主要介绍了Java TreeSet实现学生按年龄大小和姓名排序的方法,涉及java类型转换、遍历、比较等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • 使用自定义Json注解实现输出日志字段脱敏

    使用自定义Json注解实现输出日志字段脱敏

    这篇文章主要介绍了使用自定义Json注解实现输出日志字段脱敏,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java将数字价格转换为中文大写代码示例(工具类)

    java将数字价格转换为中文大写代码示例(工具类)

    这篇文章主要介绍了java将数字价格转换为中文大写的相关资料,在Java中实现将数字价格转换为中文大写需要将数字分解为各个部分(如个位、十位、百位等),并根据这些部分转换为对应的中文大写数字,需要的朋友可以参考下
    2024-10-10
  • Spring中如何使用Comparator接口

    Spring中如何使用Comparator接口

    Comparator比较器接口可以将自身传递给排序方法(比如Collections.sort或Arrays.sort),以便对排序顺序进行精确控制。本文讲述Spring中如何使用Comparator接口
    2021-06-06

最新评论