2018-04-11

java实现简单的缓存

下面代码展示用java实现一个简单缓存:


class CacheImmutable{
    private static int MAX_SIZE = 10;  //缓存数量
    private static CacheImmutable[] cache  //存储缓存数据的数据
        = new CacheImmutable[MAX_SIZE];
    private static int pos = 0;
    private final String name;   
    private CacheImmutable(String name){   //含参构造器,结合上一行final形成不可变
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public static CacheImmutable valueOf(String name){
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if(cache[i] != null && cache[i].getName().equals(name))
            {
                return cache[i]; //如果缓存中含有该name则直接使用数组中的name;
            }
        }
        if (pos == MAX_SIZE)
        {
            cache[0] = new CacheImmutable(name);
            pos = 1;   //如果缓存数据已达上限,将数组中第1个替换;
        }
        else
        {
            cache[pos++] = new CacheImmutable(name);
        }
        return cache[pos - 1]; //缓存未达到上限时,正常添加缓存;
    }
    public boolean equals(Object obj)
    {
        if(this == obj)
        {
            return true;
        }
        if(obj != null && obj.getClass() == CacheImmutable.class)
        {
            CacheImmutable ci = (CacheImmutable)obj;
            return name.equals(ci.getName());
        }
        return false;
    }
    public int hashCode()
    {
        return name.hashCode();
    }
}
public class CacheImmutableTest {
    public static void main(String[] args)
    {
        CacheImmutable c1 = CacheImmutable.valueOf("hello");
        CacheImmutable c2 = CacheImmutable.valueOf("hello");
        System.out.println(c1 == c2);
    }
}

上面代码中,CacheImmutable类直接调用静态方法valueOf(),valueOf()又去调用含参构造器,既生成CacheImmutable实例,又加入了缓存机制。
实现的几个关键点:
1.缓存最大数量(MAX_SIZE);
2.不可变类(final name,含参构造器直接生成实例变量,没有实例方法setName());
3.valueOf() 缓存方法中加入3个场景分支(1.已是缓存的返回逻辑;2.缓存容器已满,新缓存代替已有缓存的逻辑;3.正常加入缓存容器逻辑;),每个分支都调用构造器生成含有上述逻辑的实例对象;

初学java,该贴相当于学习笔记,不是到理解的是否有偏差,希望各位指正,接受并感谢一切有道理的批评。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,477评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • 你说,爱是空虚,爱是光荣,爱是我们与生俱来的虚荣。 套用你在方所分享会的话,“一看就知道是做公众号的”...
    鯨魚兒阅读 2,241评论 0 0
  • 我第一次那么强烈地意识到快要变质的东西不能吃,健身房运动完出门再热也要穿上衣服不能被冷风吹感冒,我第一次这么希望自...
    公子念北冥有鱼其名为鲲阅读 2,047评论 1 2
  • 用功于内者,必无外无所求。饰美于外者,必其中无所有。 关怀 古道热肠,待人诚挚,颇有古君子之风。就是形容的这种人。...
    張龍圖阅读 1,735评论 0 0