我有myObject的Collection coll。只有在集合中没有这样的元素时,我才想添加一个元素。
我已经覆盖了myObject的equals方法。它检查其20个属性是否相等。
然而,在集合的情况下,我想基于其中一个属性进行相等性检查(以及因此添加)。
也许我的架构存在缺陷,我不应该有两个equals的定义,而应该有两个不同的对象。
然而,如果没有太多的重构,是否有可能从这里实现我想要的东西?也就是说,我想要某种Set集合,在那里我可以告诉如何进行比较检查。这与Collection.sort()方法类似,您可以在其中提供比较器以检查比较。
答案 0 :(得分:10)
转到HashSet。它将存储唯一值。从这里的注释中,您必须覆盖hashcode和equals方法以提供每个对象的唯一性。您可以读取这两种方法之间的关系{{3} }。
答案 1 :(得分:2)
您正在寻找Set
及其中一项实施。
答案 2 :(得分:2)
您不能使用现有容器来强制执行唯一性,因为他们都想使用equals
。
如果它只是一个属性,您可以使用Map,将该属性作为键。 这将允许该属性的每个值只有一个条目。
equals
和hashCode
旨在与收藏集一起使用。你应该改变你的设计。也许打电话给你自己的平等(你现在拥有的)别的东西。也许不要直接将这些东西放入集合中,而是将其包装到某种适配器中。
答案 3 :(得分:0)
通过使用TreeSet(比较器比较器),您不需要依赖'equals / hashCode'实现。
同样,如果您的集合是一个列表,您可以使用比较器Collections.sort(列表列表,比较器c)对其进行排序;