CGB-301-CacheキャッシュFifoアルゴリズムDemo
10401 ワード
目次
一.シンプルなSimpleCacheを実現
HashMapとLinkedListに基づくCacheの小さなDemopackage com.company.oopfeatures;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
/**
*
* @author apple
* @email [email protected]
* : 2019 9 25 2:52:42
*/
public class Test03SimpleFifoCache {
public static void main(String[] args) {
SimpleFifoCache cache = new SimpleFifoCache(3);
cache.putObject(1, "A");
cache.putObject(2, "B");
cache.putObject(3, "C");
System.out.println(cache);
cache.putObject(4, "D");
cache.putObject(5, "D");
cache.putObject(6, "D");
System.out.println(cache);
}
}
/**
* A/B/C/D D A
* FIFO
* @author apple
*
*/
class SimpleFifoCache {
private int maxSize; //
private Map<Object, Object> cacheMap = new HashMap<>();
private Deque<Object> keyOrders = new LinkedList<Object>();
public SimpleFifoCache(int maxSize) {
this.maxSize = maxSize;
}
public Object getObject(Object key) {
if (keyOrders.contains(key)) {
return cacheMap.get(key);
}
return null;
}
public void putObject(Object key, Object value) {
keyOrders.add(key);
System.out.println("keyOrders===>" + keyOrders);
cacheMap.put(key, value);
if (cacheMap.size() > maxSize) {
Object firstKey = keyOrders.pop();
cacheMap.remove(firstKey);
}
}
@Override
public String toString() {
return cacheMap.toString();
}
}
package com.company.oopfeatures;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
/**
*
* @author apple
* @email [email protected]
* : 2019 9 25 2:52:42
*/
public class Test03SimpleFifoCache {
public static void main(String[] args) {
SimpleFifoCache cache = new SimpleFifoCache(3);
cache.putObject(1, "A");
cache.putObject(2, "B");
cache.putObject(3, "C");
System.out.println(cache);
cache.putObject(4, "D");
cache.putObject(5, "D");
cache.putObject(6, "D");
System.out.println(cache);
}
}
/**
* A/B/C/D D A
* FIFO
* @author apple
*
*/
class SimpleFifoCache {
private int maxSize; //
private Map<Object, Object> cacheMap = new HashMap<>();
private Deque<Object> keyOrders = new LinkedList<Object>();
public SimpleFifoCache(int maxSize) {
this.maxSize = maxSize;
}
public Object getObject(Object key) {
if (keyOrders.contains(key)) {
return cacheMap.get(key);
}
return null;
}
public void putObject(Object key, Object value) {
keyOrders.add(key);
System.out.println("keyOrders===>" + keyOrders);
cacheMap.put(key, value);
if (cacheMap.size() > maxSize) {
Object firstKey = keyOrders.pop();
cacheMap.remove(firstKey);
}
}
@Override
public String toString() {
return cacheMap.toString();
}
}