Cache的简单实现(2)

这里是对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 }
测试

 测试结果如图所示,可以看到这个容器基本实现了先进先出的功能

猜你喜欢

转载自www.cnblogs.com/zuiyuyuan/p/11431346.html