Java包含()与equals()不一致
我有一个自定义类,它覆盖了Java包含()与equals()不一致,java,equals,contains,Java,Equals,Contains,我有一个自定义类,它覆盖了equals()和hashCode()方法。我将该类的实例存储在TreeSet中。我不明白为什么树.contains(someObject)返回true,而树.first().equals(someObject)返回false,如果树只有一个元素。实际上,您应该实现,但也应该覆盖等于两者都是必需的。 此外,您应该确保compareTo方法在equals将返回true时始终返回0。如果equals将返回false,则compareTo也应返回一个值!=0 如果您想改用ha
equals()
和hashCode()
方法。我将该类的实例存储在TreeSet
中。我不明白为什么树.contains(someObject)
返回true
,而树.first().equals(someObject)
返回false
,如果树
只有一个元素。实际上,您应该实现,但也应该覆盖等于
两者都是必需的。
此外,您应该确保compareTo
方法在equals
将返回true时始终返回0。如果equals
将返回false,则compareTo
也应返回一个值!=0
如果您想改用hashCode,那么实现hashCode是必要的。因此,实施它可能也是一个好主意
编辑:
对于那些想知道:这个界面是用来当你想使用不同种类的排序时,不时。在这种情况下,您将创建一个充当分类器的附加类。然后这个类需要实现
比较器
接口。因此,在这种情况下,您不希望您的类实现它。实际上您应该实现,但您也应该覆盖等于
两者都是必需的。
此外,您应该确保compareTo
方法在equals
将返回true时始终返回0。如果equals
将返回false,则compareTo
也应返回一个值!=0
如果您想改用hashCode,那么实现hashCode是必要的。因此,实施它可能也是一个好主意
编辑:
对于那些想知道:这个界面是用来当你想使用不同种类的排序时,不时。在这种情况下,您将创建一个充当分类器的附加类。然后这个类需要实现
比较器
接口。因此,在这种情况下,您不希望您的类实现它。实际上您应该实现,但您也应该覆盖等于
两者都是必需的。
此外,您应该确保compareTo
方法在equals
将返回true时始终返回0。如果equals
将返回false,则compareTo
也应返回一个值!=0
如果您想改用hashCode,那么实现hashCode是必要的。因此,实施它可能也是一个好主意
编辑:
对于那些想知道:这个界面是用来当你想使用不同种类的排序时,不时。在这种情况下,您将创建一个充当分类器的附加类。然后这个类需要实现
比较器
接口。因此,在这种情况下,您不希望您的类实现它。实际上您应该实现,但您也应该覆盖等于
两者都是必需的。
此外,您应该确保compareTo
方法在equals
将返回true时始终返回0。如果equals
将返回false,则compareTo
也应返回一个值!=0
如果您想改用hashCode,那么实现hashCode是必要的。因此,实施它可能也是一个好主意
编辑:
对于那些想知道:这个界面是用来当你想使用不同种类的排序时,不时。在这种情况下,您将创建一个充当分类器的附加类。然后这个类需要实现比较器
接口。因此,在这种情况下,您不希望您的类实现它。根据文档:
Set接口是根据equals操作定义的,但是
TreeSet实例使用其compareTo执行所有元素比较
(或比较)方法,因此这两个元素被认为相等
从集合的角度来看,方法是相等的
如果在没有显式比较器的情况下实例化树集,则它希望插入的元素实现Comparable
。似乎您还没有这样做。根据以下文件:
Set接口是根据equals操作定义的,但是
TreeSet实例使用其compareTo执行所有元素比较
(或比较)方法,因此这两个元素被认为相等
从集合的角度来看,方法是相等的
如果在没有显式比较器的情况下实例化树集,则它希望插入的元素实现Comparable
。似乎您还没有这样做。根据以下文件:
Set接口是根据equals操作定义的,但是
TreeSet实例使用其compareTo执行所有元素比较
(或比较)方法,因此这两个元素被认为相等
从集合的角度来看,方法是相等的
如果在没有显式比较器的情况下实例化树集,则它希望插入的元素实现Comparable
。似乎您还没有这样做。根据以下文件:
Set接口是根据equals操作定义的,但是
TreeSet实例使用其compareTo执行所有元素比较
(或比较)方法,因此这两个元素被认为相等
从集合的角度来看,方法是相等的
如果在没有显式比较器的情况下实例化树集,则它希望插入的元素实现
Comparable
。看来你还没有这样做。你能分享对象equals
和hashCode
吗