实现一个缓存实例的不可变类

本文介绍了一个简单的缓存池实现方式,通过使用不可变对象来减少内存分配和提高对象复用效率。该方案采用固定大小的缓存数组存储已创建的对象,并通过`valueOf`方法检查是否已经存在相同名称的对象,如果不存在,则创建新对象并放入缓存中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package test;
 
class CacheImmutale
{
    private static int MAX_SIZE=10;
    private static CacheImmutale[] cache=new CacheImmutale[MAX_SIZE];
    private static int pos=0;
    private final String name;
    private CacheImmutale(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
    public static CacheImmutale valueOf(String name)
    {
        for(int i=0;i<MAX_SIZE;i++)
        {
            if(cache[i]!=null&&cache[i].getName().equals(name));
            {
                return cache[i];
            }
        }
        if(pos==MAX_SIZE)
        {
            cache[0]=new CacheImmutale(name);
            pos=1;
        }
        else
        {
            cache[pos++]=new CacheImmutale(name);
        }
        return cache[pos-1];
    }
     
    public boolean equals(Object obj)
    {
        if(this==obj)
        {
            return true;
        }
        if(obj!=null&&obj.getClass()==CacheImmutale.class)
        {
            CacheImmutale ci=(CacheImmutale)obj;
            return name.equals(ci.getName());
        }
        return false;
    }
    public int hashCode()
    {
        return name.hashCode();
    }
}
public class JTest
{
    public static void main(String[] args)
    {
        CacheImmutale c1=CacheImmutale.valueOf("Hello");
        CacheImmutale c2=CacheImmutale.valueOf("Hello");
        System.out.println(c1==c2);
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值