我有一组对象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和一个Object A
。如何Set<A>aSet.contains(A)
?
在内部,由于我有一个树集,它忽略了equals实现。
如果您发布的代码在可以编译的范围内是正确的,那么会更清楚。总之:
类AA
应该满足三个要求:(1(相等的对象应该返回相同的hashCode()
,(2(compareTo()
应该与equals()
一致,(3(为了使compareTo()
和TreeSet
正确工作,该类应该实现Comparable<AA>
。
我希望你能自己添加implements
条款(3(。对于(2(,请参阅Comparable
的文档。最简单的解决方法是覆盖equals()
,表示一个AA
等于另一个具有相同y
的AA
。不幸的是,这将破坏(1(,因为当前的hashCode
方法也依赖于z
。
因此,决定两个AA
对象相等意味着什么。换句话说,给定A
中的classAaSet
和AA
对象,这意味着集合已经包含这样的AA
。对它来说,拥有相同的y
就足够了吗?还是应该同时拥有同样的y
和z
?然后对equals()
、hashCode()
和compareTo()
进行编码,以反映您的决定。
事实上,我相信TreeSet
不使用hashCode()
,所以在脏的解决方案中,即使根本不覆盖hashCode()
,也可以不满足(1(。如果你的类在其他时间被用在新的上下文中,你可能会遇到麻烦,所以我不推荐它。
如果要创建一组类A的对象,则应该覆盖类A中的equals和hashcode((方法。您在类A中添加了方法equals((,但将其定义块保留为空,这等于不覆盖或实现该方法。在最后一行中,您说它忽略了Equals实现,但实现在哪里?它不在那里。问题不清楚。你能解释一下你到底在做什么吗?