FIFO是缓存算法中相对比较简单的一种,它的思想是,在缓存即将满的时候,先进队列的会先的置换出去,这就是我们讲的先入先出.在这里我们简单手写一个FIFO的cache类

* 1)存储数据:基于hashmap
* 2)淘汰算法:FIFO(关键点在于如何记录key的添加顺序)

首先定义一个cache接口

然后写一个 cache的实现类,这里我们名为FifoCache(下面图片均为FifoCache类的代码)

* 构建先进先出Cache对象:缓存满了以后要优先淘汰最早放入的对象
* 1)存储数据:基于hashmap
* 2)淘汰算法:FIFO(关键点在于如何记录key的添加顺序)

在这里我们通过队列记录key的添加顺序,Deque是JAVA中的双端队列

接下来向队列中添加数据,并判断缓存是否已满,并向cache中添加数据,

接下来是实现接口中的一些方法(获取,移除,清除,tostring,以及size)

最后写main方法,并在main方法中添加算法存数据,并且设置最大容量为3,这里用到了一种设计模式----装饰模式

执行如上代码结果,根据先入先出的原则,A,B会在缓存满时被替换出去,所以我们执行的结果是CDE

到这里,大家大概可以理解FIFO这种缓存算法了,下面说说它的弊端:

如果我们只是将先进入缓存中的移出去,那么万一先入缓存的在后面访问的次数会多怎么办,FIFO算法对于一些内存中访问频率比较高,但是放入的时间又比较早的对象而言,命中率会比较低,这就是FIFO的弊端,所以我们现在常用的缓存算法是LRU和LFU,那么这两个算法请听下回分解!

缓存算法篇其一-----FIFO(先入先出)相关推荐

  1. 缓存算法(页面置换算法)-FIFO、LFU、LRU

    为什么80%的码农都做不了架构师?>>>    转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法 FIFO(First in First ...

  2. fifo算法_缓存算法FIFO、LFU、LRU

    阅读文本大概需要3分钟. 0x01:FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为 ...

  3. 缓存算法(FIFO 、LRU、LFU三种算法的区别)

    FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...

  4. 缓存、缓存算法和缓存框架简介

    英文原文:jtraining,译文:Lixiang 引言 我们都听过 cache,当你问他们是什么是缓存的时候,他们会给你一个完美的答案,可是他们不知道缓存是怎么构建的,或者没有告诉你应该采用什么标准 ...

  5. 缓存算法, cache

    原文:http://www.cnblogs.com/duhuo/p/6210922.html 缓存算法 英文原文:jtraining 引言 我们都听过 cache,当你问他们是什么是缓存的时候,他们会 ...

  6. java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)

    我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...

  7. Android开发笔记(七十七)图片缓存算法

    ImageCache 由于手机流量有限,又要加快app的运行效率,因此好的app都有做图片缓存.图片缓存说起来简单,做起来就用到很多知识点,可算是集Android技术之大全了.只要理解图片缓存的算法, ...

  8. 【文科生带你读JavaScript数据结构与算法】2. 双向链表与LRU缓存算法原理与实现(下)

    上篇聊了聊双向链表(doubly linked list)这个数据结构,今天就来点更实际的,也可以用双链表来实现的一种生活工作中不可或缺的优化算法--LRU缓存(Least Recently Used ...

  9. 09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)

    C语言如何实现多级队列缓存(Queue.FIFO) 作者 将狼才鲸 日期 2022-03-20 1.各种缓存结构: 基础:指针.链表.内存.数组. 数据结构基础:表.树.图(多对多). 缓冲区/buf ...

  10. 阿里巴巴内部:2022年全技术栈PPT分享(架构篇+算法篇+大数据)

    我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...

最新文章

  1. ThreadLocal为什么会内存泄漏(java高级面试)
  2. Android Databinding学习
  3. JavaWordCountCore
  4. python线程进程协程面试_Python学习经验之谈:关于协程的理解和其相关面试问题...
  5. 故障诊断:SLES12平台数据库启动失败ORA-27300
  6. java 取余_JAVA面试解析(有赞)
  7. 【Java从0到架构师】Spring - AOP
  8. SpringBoot2.0.0启动流程
  9. Photopia.V3.1.2 照明灯具设计软件_usb\
  10. 硬盘根目录里的Msdia80.dll文件是干什么用的
  11. FLUKE OTDR光纤断点测试仪OFP2-100-Q特色功能及亮点分析
  12. html标签和css的语法web的一些知识汇总
  13. centos7安装steam
  14. InstallShield打包
  15. Mac-homebrew使用(Mac下包管理工具)
  16. Python初学(2)—— 基本数据类型
  17. k8s、pod、容器、虚拟机概念
  18. python制作自己的专属二维码
  19. 微信浏览器 MP4播放失败,安卓下微信浏览器不能播放MP4问题的解决,gzip捣的鬼
  20. C与C++游戏项目练习4:弹跳的小球2.0

热门文章

  1. 新时达服务器说明书_新时达电梯主板操作服务器使用手册操作说明书使用说明...
  2. python 字符串时间带有月份简写 星期简写 时区, 格式化为其他样式
  3. Java基础(五十二)-IO编程
  4. html支付系统时间,中国人民银行支付系统介绍
  5. c语言用串口读温度值,温度传感器与串口
  6. zigbee学习之串口通信
  7. 基于树莓派语音控制—LED开关控制
  8. python读取excel画折线图_python读取excel数据绘制简单曲线图的完整步骤记录
  9. lwj_C#_作业 ListT应用
  10. word自动生成目录等