2.LRU

  以下是基于双向链表+HashMap的LRU算法实现,对算法的解释如下:

  设置一个map存放对应的键和值,同时设置一个双向链表,来保存最近最久未使用的关系,如果访问一个键,键存在于map中,访问完成后,我们在链表中将该键删除,然后将其添加到链表的首部,表示最近刚访问过这个键,当缓存满了后,如果要添加一个键值对,我们要删除的就是位于链表尾部的键和其对应的值,因为它是最久未访问的值。

class LRUCache {
HashMap<Integer,Integer>cache=new HashMap<>();
LinkedList<Integer>keys=new LinkedList<>();
private static int sizeOfCache;
public LRUCache(int capacity) {
sizeOfCache=capacity;
} public int get(int key) {
if(cache.get(key)!=null){
keys.remove(Integer.valueOf(key));//先在链表中删掉该键
keys.addFirst(key); //然后将该键放到链表首部,表示刚被访问
return cache.get(key);
}
return -1;
} public void put(int key, int value) {
if(cache.get(key)!=null)
keys.remove(Integer.valueOf(key));
else if(keys.size()==sizeOfCache){ //存储块已满
int keyToRemove=keys.removeLast(); //链表最后一个键,代表最久未访问。
cache.remove(keyToRemove);
}
keys.addFirst(key);
cache.put(key,value);
}
} /**
* Your LRUCache object will be instantiated and called as such:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/

缓存---LRU算法实现的更多相关文章

  1. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  2. 缓存淘汰算法--LRU算法

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也 ...

  3. 借助LinkedHashMap实现基于LRU算法缓存

    一.LRU算法介绍 LRU(Least Recently Used)最近最少使用算法,是用在操作系统中的页面置换算法,因为内存空间是有限的,不可能把所有东西都放进来,所以就必须要有所取舍,我们应该把什 ...

  4. 简单LRU算法实现缓存

    最简单的LRU算法实现,就是利用jdk的LinkedHashMap,覆写其中的removeEldestEntry(Map.Entry)方法即可,如下所示: java 代码 import java.ut ...

  5. 缓存淘汰算法---LRU

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  6. 【转】缓存淘汰算法系列之1——LRU类

    原文地址:http://www.360doc.com/content/13/0805/15/13247663_304901967.shtml 参考地址(一系列关于缓存的,后面几篇也都在这里有):htt ...

  7. 04 | 链表(上):如何实现LRU缓存淘汰算法?

    今天我们来聊聊“链表(Linked list)”这个数据结构.学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是+LRU+缓存淘汰算法. 缓存是一种提高数据读取性能的技术 ...

  8. 缓存淘汰算法---LRU转

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  9. GuavaCache学习笔记一:自定义LRU算法的缓存实现

    前言 今天在看GuavaCache缓存相关的源码,这里想到先自己手动实现一个LRU算法.于是乎便想到LinkedHashMap和LinkedList+HashMap, 这里仅仅是作为简单的复习一下. ...

随机推荐

  1. JavaScript插件制作-tab选项卡

    JavaScript插件制作练习-鼠标划过选项卡切换图片 <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. akka 的集群访问方式

    akka  中采用startProxy分区代理 访问 ,跟使用shardRegion 来访问的区别 这两种访问方式是不是重了呢. 而另外这是一个单例代理 private fun startUniver ...

  3. Zookeeper(一)客户端

    Zookeeper-客户端 例子: // org.apache.zookeeper.ZooKeeperMain public class ZooKeeperMain { public static v ...

  4. Macpro搭建java自动化(selenium+chrome)

    准备工作: 1.下载安装eclipse,并安装培训jdk软件及环境变量: 2.下载selenium,系工具包: http://seleniumhq.org/download/ selenium-ser ...

  5. Point-wise Mutual Information

    Point-wise Mutual Information (Yao, et al 2019) reclaimed a clear description of Point-wise Mutual I ...

  6. leetcode 146LRU cache

    class LRUCache { public: LRUCache(int capacity) {_capacity=capacity;} //返回key对应的value int get(int ke ...

  7. ControlTemplate in WPF —— RadioButton

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  8. linux LVM分区查看dm设备

    linux LVM分区查看dm设备 在linux中iostat -d查看磁盘状态时,有的会有如下dm-0,dm-1的条目. Device:            tps    kB_read/s   ...

  9. 如图 honehoneclock

    如图人体时钟  honehoneclock 页面演示来自http://chabudai.org/blog/?p=59 <embed name="honehoneclock" ...

  10. Exceptionless安装的一些坑

    零.参考网站: https://www.cnblogs.com/zgshi/p/9152196.html 博客园上介绍.基本上介绍了如何安装和放到IIS上面. https://www.cnblogs. ...