您的位置:首页 > 编程语言 > Java开发

java的缓存实例的不可变类

2017-07-14 17:23 405 查看
/**

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

*/

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象