public class CacheImmutale {
private final String name;
private static CacheImmutale[] cache=new CacheImmutale[10];
//记录缓存实例在缓存中的位置,cache[pos-1]是最新缓存的实例。
private static int pos=0;
public CacheImmutale(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public static CacheImmutale valueOf(String name)
{
//遍历已缓存的对象
for(int i=0;i<pos;i++)
{
//如果有相同的实例,直接返回该缓存的实例
if(cache[i]!=null&&cache[i].getName().equals(name))
{
return cache[i];
}
}
//如果缓存池已满
if(pos==10)
{
//把缓存池的第一个对象覆盖,即把刚刚生成的对象放在缓存池的最开始的位置。
cache[0]=new CacheImmutale(name);
//把pos设为1
pos=1;
return cache[0];
}
else
{
//把新常见的对象缓存起来,pos加1
cache[pos++]=new CacheImmutale(name);
return cache[pos-1];
}
}
public boolean equals(Object obj)
{
if(obj instanceof CacheImmutale)
{
CacheImmutale ci=(CacheImmutale) obj;
if(name.equals(ci.getName()))
{
return true;
}
}
return false;
}
public int hashCode()
{
return name.hashCode();
}
public static void main(String[] args)
{
CacheImmutale c1=CacheImmutale.valueOf("hello");
CacheImmutale c2=CacheImmutale.valueOf("hello");
CacheImmutale c3=CacheImmutale.valueOf("huxing");
System.out.println(c1==c2);
System.out.println(c1==c3);
}
}