这里是对FifoCache的一个简单实现,内部封装一个LinkedList用做队列来记录添加元素的顺序,以此来达到先进先出的效果
1 package com.company.cache; 2 3 import java.util.LinkedList; 4 5 public class FifoCache implements Cache { 6 //组合一个Cache来存放元素 7 private Cache cache; 8 //用LinkedList做队列来记录存放元素的顺序 9 private LinkedList<Object> orderKeyList; 10 //最大容量 11 private int maxCap; 12 public FifoCache(Cache cache) { 13 //如果不自定义最大容量的话,默认的最大容量为3 14 this(cache, 3); 15 } 16 public FifoCache(Cache cache, int cap) { 17 this.cache = cache; 18 this.orderKeyList = new LinkedList<>(); 19 this.maxCap = cap; 20 } 21 @Override 22 public void putObject(Object key, Object value) { 23 //记录key的顺序 24 orderKeyList.add(key); 25 //如果存放的数据量超出了最大容量 26 if(orderKeyList.size() > maxCap){ 27 //移除老的元素 28 Object oldkey = orderKeyList.removeFirst(); 29 cache.removeObject(oldkey); 30 } 31 //放入新元素 32 cache.putObject(key, value); 33 } 34 @Override 35 public Object getObject(Object key) { 36 return cache.getObject(key); 37 } 38 @Override 39 public Object removeObject(Object key) { 40 return cache.removeObject(key); 41 } 42 @Override 43 public String toString() { 44 return cache.toString(); 45 } 46 }
下面是对该容器的一个测试
1 public static void main(String[] args) { 2 //1.构建Cache对象 3 FifoCache cache = new FifoCache(new PerpetualCache()); 4 //2.存储数据 5 cache.putObject("A", 100); 6 cache.putObject("B", 200); 7 cache.putObject("C", 300); 8 cache.putObject("D", 400); 9 System.out.println(cache); 10 }
测试结果如图所示,可以看到这个容器基本实现了先进先出的功能
原文:https://www.cnblogs.com/zuiyuyuan/p/11431346.html