缓存实例的不可变类:
来源:互联网 发布:ios数组动态添加元素 编辑:程序博客网 时间:2024/05/18 00:12
可变类的实例状态不可改变,可以很方便的被多个对象所共享,如果程序要经常使用相同的不可变类实例,则应该考虑缓存这种不可变的实例。因为重复创建相同的对象无太大的意义,会加大系统开销。缓存是软件设计中一个非常有用的模式。
下面程序将使用一个数组作为缓存池:
class CacheImmutale{ private static int MAX_SIZE = 10; //使用数组来缓存已有的实例 private static CacheImmutale [] cache=new CacheImmutale [MAX_SIZE]; //记录缓存实例在缓存中的位置,cache[pos-1]是最新缓存的实例 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设为0 } else { //把新创建的对象缓存起来,pos+1 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"); //下面将输出true System.out.println(c1==c2); }}
0 0
- 缓存实例的不可变类
- 缓存实例的不可变类
- 缓存实例的不可变类
- 缓存实例的不可变类
- 缓存不可变类的实例
- 缓存实例的不可变类:
- java的缓存实例的不可变类
- 缓存不可变类实例的不可变类【参考疯狂Java讲义】
- JAVA中具有实例缓存的不可变类
- JAVA中具有实例缓存的不可变类
- java一个实现实例缓存的不可变类
- java 缓存实例的不可变类 p186
- java_数组作缓存池的不可变类实例
- 52 Java final 缓存实例的不可变类
- 6.4.8 缓存实例的不可变类
- 利用数组实现缓存实例的不可变类
- 实现一个缓存实例的不可变类
- 不可变类的缓存
- 鸽巢排序、桶排序
- java 排序算法
- C# ASP.NET 返回上一页的通用代码
- C语言关键字之const的使用
- 每天一条linux---linux目录结构--这一篇讲的很详细看了好长时间
- 缓存实例的不可变类:
- Transform / Transition / Animation 区别
- iWebShop 二次开发之商城后台模板渲染流程
- MySql命令大全
- C++static
- C/C++宏参数
- C++的输入和输出与标准输出流
- 抽象类:
- Web前端面试指导(二):编写简历,吃透简历内容