10

我有一个 myObject 的集合 coll。只有当集合中没有这样的元素时,我才想向 coll 添加一个元素。

我已经覆盖了 myObject 的 equals 方法。它检查其 20 个属性是否相等。

但是,在集合的情况下,我想仅基于这些属性之一进行相等性检查(以及因此添加)。

也许我的架构有缺陷,我不应该有两个相等的定义,而应该有两个不同的对象。

但是,是否有可能在没有太多重构的情况下从这里实现我想要的?也就是说,我想要某种 Set 集合,我可以在其中告诉如何进行比较检查。这类似于 Collection.sort() 方法,您可以在其中提供比较器来检查比较。

4

4 回答 4

11

HashSet 。它将存储唯一值。从这里的评论中,你必须重写 hashcode 和 equals 方法以提供每个对象的唯一性。你可以在这里阅读这两个方法之间的关系。

于 2013-04-15T06:38:42.680 回答
2

您正在寻找一个Set和一个它的实现。

于 2013-04-15T06:39:43.263 回答
2

您不能在这里使用现有容器来强制唯一性,因为它们都想使用equals.

如果它只有一个属性,则可以使用 Map,将该属性作为键。这将只允许该属性的每个值一个条目。

equals并且hashCode旨在与集合一起使用。你应该改变你的设计。也许将您自己的平等(您现在拥有的)称为其他东西。也许不要将这些东西直接放入集合中,而是包装到某种适配器中。

于 2013-04-15T06:40:41.557 回答
0

通过使用 TreeSet(Comparator 比较器),您无需依赖“equals/hashCode”实现。

同样,如果您的集合是一个列表,您可以使用比较器对其进行排序 Collections.sort(List list, Comparator c);

于 2017-08-01T17:10:24.417 回答