我有一组对象A
。
Class A {
String text1;
String text2
TreeSet<ClassAA> classAaSet;
@Override
public boolean equals(object b){
}
@Override
public int hashCode(){
}
}
另一堂课:
Class AA {
String y;
String z;
@Override
public int hashCode() {
return Objects.hash(y,z)
}
@Override
public int compareTo(ClassAA other) {
return y.compareTo(other.y)
}
}
我有一套A和一个对象A
。
我如何Set<A>aSet.contains(A)
?
在内部,因为我有一个树集,它忽略了equals实现。
答案 0 :(得分:0)
你想创建一组A类对象然后你应该覆盖A类中的equals和hashcode()方法。你已经在类A中添加了equals()方法,但是你的定义块保持为空等于不覆盖或实现该方法。在最后一行,你说它忽略了Equals实现,但实现在哪里?它不在那里。问题不明确。你能解释一下你到底在想什么吗?
答案 1 :(得分:0)
如果您发布的代码在可编译的范围内是正确的,那就更清楚了。无论如何:
您的班级AA
应满足三个要求:(1)平等对象应返回相同的hashCode()
,(2)compareTo()
应与equals()
一致,并且( 3)对于compareTo()
和TreeSet
正常工作,该类应实现Comparable<AA>
。
我希望您可以自己添加implements
子句(3)。对于(2),请查看Comparable
的文档。最简单的解决方法是覆盖equals()
,使AA
等于具有相同AA
的其他y
。不幸的是,这会中断(1),因为当前hashCode
方法也取决于z
。
因此,确定两个AA
个对象的相同含义。换句话说,在classAaSet
和A
对象中给定AA
,意味着该集合已包含此类AA
。它是否足以具有相同的y
或者是否应该具有相同的y
和相同的z
?然后编写代码equals()
,hashCode()
和compareTo()
以反映您的决定。
实际上,我认为TreeSet
不使用hashCode()
,所以在一个肮脏的解决方案中,即使没有覆盖hashCode()
,也可以在没有履行(1)的情况下生活。如果你的课程在其他时间被用于新的环境中,你可能会遇到麻烦,所以我不推荐它。