一对多的缓存容器~~~~
思路大概是这样,在业务处理时,我们经常会遇见随即提取数据的要求,例如:
一个用户要随即搜索另一个用户,在下次搜索时,之前搜索的用户将不会被搜到;
我想是先写一个包装类,封装缓存对象,这个对象有一个KEY,并且一个KEY可以对应多个values,每次搜索时,会将新的value插入相应的key中;
KEY是搜索方,而VALUE是此用户搜索到的用户;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author bin_liu
*/
public class CacheItem{
private Set key;
private Set key = new HashSet();
private List values = new ArrayList();
/* ========= override equals method ======= */
/**
* @param rhs
* @return boolean
*/
public boolean equals(Object rhs){
if(rhs == null)
return false;
if(! ( rhs instanceof CacheItem ))
return false;
CacheItem that = (CacheItem)rhs;
if(this.getKey() != null && that.getKey() != null){
if(!this.getKey().equals(that.getKey()))
return false;
if(! ( this.getKey() == that.getKey() ))
return false;
}
return true;
}
/**
* @return int
*/
public int hashCode(){
if(this.hashValue == 0){
int result = 17;
result = result * 37 + this.hashCode();
this.hashValue = result;
}
return this.hashValue;
}
/* ========= getter && setter ====== */
public Object getKey(){
return key;
}
public void setKey(Set key){
this.key = key;
}
public List getValues(){
return values;
}
public void setValues(List values){
this.values = values;
}
}
然后是主要的方法
import java.util.Iterator;
/**
* @author bin_liu
*/
public interface CacheMap{
/**
* 添加一个对象和值,如果该KEY已在缓存中,则将他的值添进VALUE
*
* @param key
* @param value
*/
public void add(Object key,Object value);
/**
* 得到该缓存的所有key
*
* @return Iterator
*/
public Iterator getKey()throws NullPointerException;
/**
* 得到这个key所对应的所有值
*
* @return Iterator
*/
public Iterator getValueByKey(Object key)throws NullPointerException;
}
因为想做得通用些,所以equals方法总觉的写的有问题
因为每个key里存放的是一个User对象,而value里存放的也是User对象...
下次再使用时,如果用了其他的包装类,就又要改动这个包装类的equals方法,很恶心,大家有没有什么更好的建议??
实现上也有问题,每法做到通用,只能是哪个PO要做此动作,就要自己去实现这个接口的方法。。。。。郁闷啊。。