您的位置:首页 > 其它

6.4.8 缓存实例的不可变类

2015-04-06 21:05 225 查看
package chap6_4;

import javax.swing.CellEditor;

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;
public CacheImmutale(String name) {
// TODO Auto-generated constructor stub
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 CacheImmutaleTest {
public static void main(String[] args)
{
CacheImmutale c1=CacheImmutale.valueOf("hello");
CacheImmutale c2=CacheImmutale.valueOf("hello");
System.out.println(c1==c2);
}

}


运行结果

true


该类共可以缓存MAX_SIZE个CacheImmutale对象。

是否需要隐藏CacheImmutale类的构造器完全取决于系统需求,盲目乱用缓存也可能导致系统性能下降,缓存的对象会占用系统内存,如果某个对象只使用一次,重复使用的概率不大,缓存该实例就弊大于利;反之,如果某个对象需要频发的重复使用,缓存该实例就利大于弊。

package chap6_4;

public class IntegerCacheTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Integer in1=new Integer(6);
Integer in2=Integer.valueOf(6);
Integer in3=Integer.valueOf(6);
System.out.println(in1==in2);
System.out.println(in2==in3);
Integer in4=Integer.valueOf(200);
Integer in5=Integer.valueOf(200);
System.out.println(in4==in5);

}

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