FIFO 缓存接口设计

题目描述:设计一个接口,将对象存在缓存中。替换策略用FIFO。
接口定义

/**
 * @author jy
 * @date 2018年6月27日
 * <p>Description: </p> 
 */
package datastruct;

/**
 * @author jy
 * @param <E>
 *
 */
public interface Cache<E> {
    public void put(String key, E value);

    public E get(String key);



}

1.用hashmap来实现

/**
 * @author jy
 * @date 2018年6月27日
 * <p>Description: </p> 
 */
package datastruct;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * @author jy
 * @param <E>
 *
 */
public class FIFOCache<E> implements Cache<E> {

    int size = 0;
    int capacity;

    Map<String, E> map = new HashMap();
    List<String> list = new LinkedList();

    public FIFOCache(int capacity) {
        this.capacity = capacity;
    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#put(java.lang.Object)
     */
    @Override
    public void put(String key, E value) {
        if (size == capacity) {
            replace();
        }

        map.put(key, value);
        list.add(key);
        size++;

    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#get(java.lang.String)
     */
    @Override
    public E get(String key) {
        return map.get(key);
    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#replace()
     */
    private void replace() {
        String key = list.get(0);
        map.remove(key);

        list.remove(0);
        size--;
    }

    public static void main(String args[]) {
        FIFOCache<String> cache = new FIFOCache(3);
        cache.put("1", "1");
        cache.put("2", "2");
        cache.put("3", "3");

        cache.put("4", "4");
        System.out.println(cache.size);

        System.out.println(cache.get("1"));
        System.out.println(cache.get("4"));

        cache.put("5", "5");
        System.out.println(cache.size);
        System.out.println(cache.get("2"));
        System.out.println(cache.get("3"));
        System.out.println(cache.get("5"));
        System.out.println(cache.get("4"));

    }

}

2.用数组来实现

/**
 * @author jy
 * @date 2018年6月27日
 * <p>Description: </p> 
 */
package datastruct;

import java.util.HashMap;
import java.util.Map;

/**
 * @author jy
 *
 */
public class FIFOCacheWithArray<E> implements Cache<E> {

    int size = 0;
    int capacity;
    Map[] objects;

    /**
     * @param args
     *            <p>
     *            Description:
     *            </p>
     */

    public FIFOCacheWithArray(int capacity) {
        this.capacity = capacity;
        objects = new Map[capacity];
    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#put(java.lang.String, java.lang.Object)
     */
    @Override
    public void put(String key, E value) {

        if (size == capacity) {
            replace();
        }
        Map map = new HashMap<String, Object>();
        map.put(key, value);
        objects[size++] = map;
    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#get(java.lang.String)
     */
    @Override
    public E get(String key) {
        for (int i = 0; i < capacity; i++) {
            Map map = objects[i];

            if (map.containsKey(key)) {
                return (E) map.get(key);
            }
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#setCacheCapcity(int)
     */

    /*
     * (non-Javadoc)
     * 
     * @see datastruct.Cache#replace()
     */
    private void replace() {

        for (int i = 1; i < capacity; i++) {
            objects[i - 1] = objects[i];
        }
        size--;
    }

    public static void main(String[] args) {
        FIFOCacheWithArray cache = new FIFOCacheWithArray(3);
        // cache.setCacheCapacity(3);
        cache.put("1", "1");
        cache.put("2", "2");
        cache.put("3", "3");

        cache.put("4", "4");
        System.out.println(cache.size);

        System.out.println(cache.get("1"));
        System.out.println(cache.get("4"));

        cache.put("5", "5");
        System.out.println(cache.size);
        System.out.println(cache.get("2"));
        System.out.println(cache.get("3"));
        System.out.println(cache.get("5"));
        System.out.println(cache.get("4"));
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,287评论 18 399
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,895评论 1 14
  • 离别的日子, 感伤的季节, 堂堂八尺汉难抑泪滴。 眼泪不是离别的必须, 只因一同走过, 浓情满自溢! 再见,说不出...
    龙少之言阅读 4,816评论 0 2
  • 这是我女儿14岁时写的一首诗 一盏星河留人醉,幽芳媚引月色溶。正是烽火燎天日,偷却夜听早虫鸣。遥忆九天祥龙舞,满朝...
    PIPI_水晶晶婆阅读 2,924评论 0 0

友情链接更多精彩内容