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算法的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot的DeferredResult案例:DeferredResult的超时处理方式
这篇文章主要介绍了SpringBoot的DeferredResult案例:DeferredResult的超时处理方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-01-01
解决springboot responseentity<string>乱码问题
这篇文章主要介绍了解决springboot responseentity<string>乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
Java TreeSet实现学生按年龄大小和姓名排序的方法示例
这篇文章主要介绍了Java TreeSet实现学生按年龄大小和姓名排序的方法,涉及java类型转换、遍历、比较等相关操作技巧,需要的朋友可以参考下2017-09-09


最新评论