美文网首页
2018-04-11

2018-04-11

作者: 抓虫的蜗牛 | 来源:发表于2018-04-11 17:30 被阅读0次

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,该贴相当于学习笔记,不是到理解的是否有偏差,希望各位指正,接受并感谢一切有道理的批评。

相关文章

  • 纯粹

    /** * @Author liguo * @Description * @Data 2018-04-11 */ ...

  • mysql错误集锦

    2018-04-11:环境:linux+wdcp+phpservice mysqld status 报错“ERRO...

  • 用户中心

    layout: "post"title: "用户中心"date: "2018-04-11 18:12" 用户中心 ...

  • 用户信息

    layout: "post"title: "用户模块"date: "2018-04-11 09:02" 用户系统 ...

  • 梵塔网络Penta .vs. 本体网络Ontology

    2018-04-11 Penta CEO David Ritter:首创DSC共识算法,突破公链掣肘 4月10日,...

  • 2018-04-11

    2018-04-11 180 戴师傅 简书作者 2018.04.11 21:10 打开App (稻盛哲学学习会)打...

  • 192G147号沈家芬8/4-15/4周检视

    2018-04-11 23:15 · 字数 914 · 阅读 2 · 让生命灿烂如花 没有反思的人生不值得过! ...

  • 孩子的感动

    2018-04-11 星期三 晴 今天,孩子有跟我说起学校里的事情。同学之间嬉戏,他被人说哭了(真是没出...

  • 春日巧遇故人

    春日巧遇故人 新绿层重,新花沐风。 春雨道上,旧人新逢。 xxx YBY 汉城湖的诗韵2018-04-11 Sta...

  • 网络强文~装傻!高人也。

    做人的最高境界:装傻! 来源:2018-04-11 美篇 你骗了我,我仍然相信你, 这是智慧。 你为我捧场,我为你...

网友评论

      本文标题:2018-04-11

      本文链接:https://www.haomeiwen.com/subject/vnezhftx.html