JAVA实现LRU算法的参考示例
LRU简介
LRU是LeastRecentlyUsed近期最少使用算法,它就可以将长时间没有被利用的数据进行删除。
实现
最近面了阿里的外包吧,居然也要在线敲代码了,那叫一个紧张啊。题目就是实现一个LRU算法的缓存。外包居然要求也这么高了,哎。还好,LRU是我大学老师布置的一道题目,当然我用C语言实现的,算法原理那是一清二楚,可是面试的时候就脑子一片空白了。好在,边敲代码,边思考,就慢慢想起来了,下面是我的代码。仅供参考
/**
*设计和构建一个“最近最少使用”LRU缓存,该缓存会删除最近最少使用的项目。
*缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。
*当缓存被填满时,它应该删除最近最少使用的项目。
*考虑多线程操作下的操作安全和性能。
*/
publicclassLRUCache{
privateintmaxSize;
/**
*存储缓存数据
*/
privateConcurrentHashMapmap=newConcurrentHashMap<>();
/**
**存储缓存key列表
*/
privateLinkedListlist;
LRUCache(){
}
LRUCache(intmaxSize){
this.maxSize=maxSize;
this.list=newLinkedList<>(maxSize);
}
/**
*@paramkey缓存key
@return缓存值
*/
synchronizedObjectgetVal(Stringkey){
//1.从map里取数据
Objectobj=map.get(key);
//2.将key置于list的尾部(表示最近被访问过了)
if(obj!=null){
addOrRefreshKey(key);
}
}
synchronizedvoidputVal(Stringkey,Objectval){
//1.设置val到map中
//2.将key置于list的尾部(表示最近被访问过了)
//3.需要做判断是否list.size()>maxSize。如果满了就删除头部(最近最少使用)的数据后再执行1-2步骤
}
/**
*添加或刷新key
*/
privatevoidaddOrRefreshKey(Stringkey){
this.list.remove(key);//管他三七二十一,先删除掉
this.list.add(key);//然后添加这个可以,保证key置于list的尾部
}
}
以上就是JAVA实现LRU算法的参考示例的详细内容,更多关于JavaLRU算法的资料请关注毛票票其它相关文章!