gpt4 book ai didi

java - 更新 Set 中的对象

转载 作者:太空狗 更新时间:2023-10-29 22:43:03 37 4
gpt4 key购买 nike

假设我的应用程序中有这种类型:

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<code><A</code>>结构体。现在,我有一个 A 类型的对象并希望执行以下操作:

  • 如果我的A在集合内,更新其字段 b以匹配我的对象。
  • 否则,将其添加到集合中。

因此检查它是否在其中很容易 ( contains ),添加到集合中也很容易。我的问题是:如何获得句柄来更新其中的对象?接口(interface)Set没有 get方法,我能想到的最好的方法是删除集合中的对象并添加我的。另一种更糟糕的替代方法是使用迭代器遍历集合以尝试定位对象。

我很乐意接受更好的建议...这包括有效使用其他数据结构。

尤瓦尔=8-)

编辑:谢谢大家的回答...不幸的是,我不能“接受”这里的最佳答案,那些建议使用 Map 的答案。 ,因为仅仅为了这个目的彻底改变集合的类型会有点极端(这个集合已经通过 Hibernate 映射了......)

最佳答案

由于 Set 只能包含对象的一个​​实例(由其 equalshashCode 方法定义),只需将其删除然后添加即可。如果已经有一个,那么另一个将从集合中删除并替换为您想要的那个。

我有做类似事情的代码 - 我正在缓存对象,以便某个特定对象出现在 GUI 上的一堆不同位置的任何地方,它总是相同的。在这种情况下,我没有使用 Set,而是使用了 Map,然后我得到了一个更新,我从 Map 中检索它并就地更新它,而不是创建一个新实例。

关于java - 更新 Set 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/175186/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com