CGB-301-CacheキャッシュFifoアルゴリズムDemo

10401 ワード

目次

  • 1.シンプルなSimpleCache
  • を実現

    一.シンプルなSimpleCacheを実現


    HashMapとLinkedListに基づくCacheの小さなDemo
    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();
    	}
    
    }