一对多的缓存容器~~~~

darkula 2005-04-21 09:55:49
思路大概是这样,在业务处理时,我们经常会遇见随即提取数据的要求,例如:
一个用户要随即搜索另一个用户,在下次搜索时,之前搜索的用户将不会被搜到;
我想是先写一个包装类,封装缓存对象,这个对象有一个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要做此动作,就要自己去实现这个接口的方法。。。。。郁闷啊。。
...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xtyun 2005-08-02
  • 打赏
  • 举报
回复
mark
darkula 2005-05-24
  • 打赏
  • 举报
回复
TO:Pt_Coffee(Pt.Mr.咖啡)
我就是这样做的~~~~看我的代码~~~
private Set key = new HashSet();

private List values = new ArrayList();

但当时实现细节把我绕乱了……
Pt_Coffee 2005-05-23
  • 打赏
  • 举报
回复
那您能不能包装一个类,类里边使用一个HashMap,HashMap的一个key对应的value中存放的是个ArrayList或Vector,这样的话对应于一个key的HashMap可以取出一组ArrayList或Vector中的元素,这样的话能不能达到您对一对多的需求呢?
仅为参考。
awers 2005-05-21
  • 打赏
  • 举报
回复
呵呵,我也顶
darkula 2005-04-22
  • 打赏
  • 举报
回复
.....Map不是一对一的key && value关系么...我想做个一个key对应多个value的容器....
darkula 2005-04-22
  • 打赏
  • 举报
回复
…………哎
飞行的兔子 2005-04-21
  • 打赏
  • 举报
回复
没看明白你的问题,呵呵,帮你顶一下!
darkula 2005-04-21
  • 打赏
  • 举报
回复
。。。。是说这问题太弱么?那起码来几个鸡蛋呀~~~~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧