java唯一元素集合

java唯一元素集合,java,Java,我有一套我的物品。只有在集合中没有这样的元素时,我才想向coll添加元素 我已经重写了myObject的equals方法。它检查其20个属性是否相等 但是,对于集合,我希望仅基于其中一个属性进行相等性检查(因此添加) 也许我的架构有缺陷,我不应该有两个相等的定义,而是应该有两个不同的对象 然而,在没有太多重构的情况下,是否有可能从这里实现我想要的?也就是说,我想要某种集合,在那里我可以告诉如何进行比较检查。这类似于Collection.sort()方法,在该方法中,您可以提供比较器来检查比较。继

我有一套我的物品。只有在集合中没有这样的元素时,我才想向coll添加元素

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

但是,对于集合,我希望仅基于其中一个属性进行相等性检查(因此添加)

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


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

继续。它将存储唯一的值。从这里的注释来看,您必须重写hashcode和equals方法以提供每个对象的唯一性。您可以读取这两个方法之间的关系。

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

您不能在此处使用现有容器来强制唯一性,因为它们都要使用
equals

如果只有一个属性,则可以使用映射,并将该属性作为键。 对于该属性,每个值只允许一个条目

equals
hashCode
用于集合。你应该改变你的设计。也许你可以把你自己的同龄人(你现在拥有的那个)称为其他人。可能不直接将这些内容放入集合中,而是封装到某种适配器中。

通过使用TreeSet(Comparator Comparator),您不需要依赖“equals/hashCode”实现


类似地,如果您的集合是一个列表,您可以使用comparator Collections.sort(list list,comparator c)对其进行排序

你需要使用hashCode和equals(至少这里不是后者)。基于什么是唯一的?这就是问题所在。当我实例化hashset时,我可以提供一种方法来判断两个元素是否是唯一的吗。你还需要equals(OP不想使用)不好,因为不使用equals是问题的关键(这当然是一个坏主意)。@Thilo我编辑使用equals方法,并在hashcode和equals方法之间建立链接?你没读过吗?然后呢?如何使用这个比较器?看看SortedSet。也许这对你有用,但这可能有用。不过,我会非常小心,因为您的比较器与equals和/或complete不一致。您需要一个不使用
equals
的比较器。我是否可以使用从set继承的自己的集合,在其中重写负责相等性测试的方法?