我有一个带有重写的equals()
和hashCode()
方法的自定义类。我将该类的实例存储在TreeSet
中。我不能弄清楚为什么tree.contains(someObject)
返回true
,而tree.first().equals(someObject)
返回false
的原因,如果tree
只有一个元素。
最佳答案
实际上,您应该实现Comparable
,但是您也应该覆盖equals
。两者都是必需的。
此外,当compareTo
返回true时,应确保equals
方法始终返回0。如果equals
返回false,则compareTo
也应返回值= 0。
如果要改为使用HashMap
,则必须实现hashCode。因此,实现它可能也是一个好主意。
编辑:
对于那些对Comparator
感到疑惑的人:当您想不时使用不同种类的排序时,可以使用此接口。在这种情况下,您将创建一个充当分类器的附加类。然后,此类需要实现Comparator
接口。因此,在这种情况下,您不希望您的类实现它。