Java包含()不符合equals()

时间:2015-05-09 14:57:32

标签: java equals contains

我有一个包含覆盖equals()hashCode()方法的自定义类。我将该类的实例存储在TreeSet中。在tree.contains(someObject)只有一个元素的情况下,我无法弄清楚为什么true会返回tree.first().equals(someObject),而false会返回tree

2 个答案:

答案 0 :(得分:2)

实际上你应该实施Comparable ,但你也应该覆盖equals 两者都是必需的。

此外,当compareTo返回true时,您应确保equals方法始终返回0。如果equals将返回false,那么compareTo也应该返回一个值!= 0.

如果您想使用HashMap,则必须实现hashCode。所以,实现它也是一个好主意。

修改

对于那些对Comparator感到疑惑的人:当您想要不时使用不同类型的排序时,会使用此界面。在这种情况下,您将创建一个充当分拣机的附加类。然后该类需要实现Comparator接口。因此,在这种情况下,您不希望您的班级实施它。

答案 1 :(得分:1)

根据TreeSet的文档:

  

Set接口是根据equals操作定义的,但是a   TreeSet实例使用compareTo执行所有元素比较   (或比较)方法,因此两个被认为相等的元素   从集合的角度来看,方法是相等的。

如果在没有显式比较器的情况下实例化TreeSet,则期望插入的元素实现Comparable。看来你还没有那样做。