java的缓存实例的不可变类

/**

不可变实例的实例状态不可改变,可以方便被多个对象共享

*/

class cacheimmutale

{
private static int MAX_SIZE=10;
private static cacheimmutale[] cache=new cacheimmutale[MAX_SIZE];//用数组来缓存已有的实例
private static int pos=0;//‘记录缓存实例在缓存中的位置,cache【pos-1】是最新缓存的实例
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);//把新创建的对象缓存起来,pos+1
return cache[pos-1];
}
public boolean equals(Object obj)
{
if (this == obj) //两个对象为同一个对象
return true;
if(obj != null && obj.getClass()==cacheimmutale.class)//只有当obj是cacheimmutale对象
{
cacheimmutale ci=(cacheimmutale)obj;
return name.equals(ci.getname());//判断当前对象的name是否ci的name相等
}
return false;
}
public int hashcode()
{
return name.hashCode();
}

}
public class test6$4$7 {
public static void main(String[] args)
{
cacheimmutale c1=cacheimmutale.valueof("hello");
cacheimmutale c2=cacheimmutale.valueof("hello");
System.out.println(c1==c2);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值