Java设置add以放置自定义add impl
我需要使用Java设置add以放置自定义add impl,java,set,Java,Set,我需要使用Set接口的实现来存储类型为MyObject的对象 MyObject有两个字段:id和score。对于MyObject上的相等,仅使用id。我需要使用的功能之一是能够支持在将两个MyObjects(具有相同的ids)插入此集合时添加scores 目前,我正在使用TreeSet,但它的工作方式与我希望的不同 Set<MyObject> container = new TreeSet<MyObject>(); MyObject obj1 = new
Set
接口的实现来存储类型为MyObject
的对象
MyObject
有两个字段:id
和score
。对于MyObject
上的相等,仅使用id
。我需要使用的功能之一是能够支持在将两个MyObject
s(具有相同的id
s)插入此集合时添加score
s
目前,我正在使用TreeSet
,但它的工作方式与我希望的不同
Set<MyObject> container = new TreeSet<MyObject>();
MyObject obj1 = new MyObject(12, 0.345);
container.add(obj1);
MyObject obj2 = new MyObject(12, 0.1);
container.add(obj2);
Set container=new TreeSet();
MyObject obj1=新的MyObject(12,0.345);
container.add(obj1);
MyObject obj2=新的MyObject(12,0.1);
container.add(obj2);
我希望容器具有Myobject(12,0.445)
,但作为一个集合,容器具有Myobject(12,0.1)
有什么东西可以让我找到我想要的吗?更改代码/类以遵循以下语义
if(container.contains(newObj))
{
MyObject oriiginalObj = container.get(newObj);
originalObj.incrementScore(newObj.getScore());
}
还有其他方法可以做到这一点,比如扩展TreeSet并重写add()方法,或者通过委托(建议使用),但是我提供的解决方案是简单而明确的
更正:按照Thomas的建议,使用TreeMap而不是TreeSet您应该为此使用
映射:
Map<Integer, Double> container = new TreeMap<Integer, Double>();
Map container=newtreemap();
或
Map container=newtreemap();
然后可以在容器上调用get
,查看对象是否已经存在,并增加其分数
Set
不适用于您,因为没有有效的方法从集合中获取obj1
。树集实现的add方法如下所示
private transient SortedMap<E,Object> m; // The backing Map
public boolean add(E o) {
return m.put(o, PRESENT)==null;
}
私有瞬态分类dmap m;//背景图
公共布尔加法(EO){
返回m.put(o,PRESENT)=null;
}
其中PRESENT是一个虚拟对象,用于指示添加的对象已存在。
您可以将TreeSet子类化,以使用分数和而不是虚拟对象
或者,如果可能的话,完全去掉集合,直接使用地图,就像@Thomas所说的那样
private transient SortedMap<E,Object> m; // The backing Map
public boolean add(E o) {
return m.put(o, PRESENT)==null;
}