假设我的应用程序中有这种类型:
public class A {
public int id;
public B b;
public boolean equals(Object another) { return this.id == ((A)another).id; }
public int hashCode() { return 31 * id; //nice prime number }
}
和一个结构。现在,我有一个类型的对象并想要执行以下操作:Set
<A
>A
- 如果 my
A
在集合内,请更新其字段b
以匹配我的对象。 - 否则,将其添加到集合中。
所以检查它是否在那里很容易(contains
),添加到集合中也很容易。我的问题是:如何获得更新对象的句柄?接口Set
没有get
方法,我能想到的最好的方法是删除集合中的对象并添加我的。另一种更糟糕的替代方法是使用迭代器遍历集合以尝试定位对象。
我很乐意接受更好的建议……这包括有效使用其他数据结构。
尤瓦尔=8-)
编辑:谢谢大家的回答......不幸的是,我不能在这里“接受”最好的答案,那些建议使用 a 的人Map
,因为仅仅为了这个目的而彻底改变集合的类型会有点极端(这个集合是已经通过 Hibernate 映射...)