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); } }
相关文章推荐
- 缓存实例的不可变类:
- 不可变类和缓存实例的不可变类
- 缓存实例的不可变类
- 缓存实例的不可变类
- 《疯狂JAVA讲义》缓存实例的不可变类
- JAVA中具有实例缓存的不可变
- 缓存不可变类的实例
- 实现一个缓存实例的不可变类
- 缓存实例的不可变类
- java的缓存实例的不可变类
- Java_final关键字,不可变类,缓存不可变类实例(缓存池技术)
- java 不可变类 缓存实例
- 缓存实例的不可变类
- Java_final关键字,不可变类,缓存不可变类实例(缓存池技术)
- 疯狂java学习笔记1002---缓存实例的不可变类
- java一个实现实例缓存的不可变类
- 缓存实例的不可变类
- java 缓存实例的不可变类 p186
- JAVA中具有实例缓存的不可变类
- JAVA中具有实例缓存的不可变类