Java 我怎么说一个对象存在于一个也有树集的集合中?

Java 我怎么说一个对象存在于一个也有树集的集合中?,java,set,treeset,Java,Set,Treeset,我有一组对象A Class A { String text1; String text2 TreeSet<ClassAA> classAaSet; @Override public boolean equals(object b){ } @Override public int hashCode(){ } } 我有一组a和一个对象a。 如何SetaSet.contains(A) 在内部,由于我有一个树

我有一组对象
A

Class A {

    String text1;
    String text2
    TreeSet<ClassAA> classAaSet;
    @Override 
    public boolean equals(object b){

    }
    @Override 
    public int hashCode(){

    }
}
我有一组a和一个对象
a
。 如何
SetaSet.contains(A)


在内部,由于我有一个树集,它忽略了equals实现。

如果要创建类a的对象集,那么应该重写类a中的equals和hashcode()方法。您在类a中添加了方法equals(),但将其定义块保持为空,这等于不重写或实现该方法。在最后一行中,您说它忽略了Equals实现,但实现在哪里?它不在那里。问题不清楚。你能解释一下你到底在尝试什么吗?

如果你发布的代码正确到可以编译的程度,那就更清楚了。无论如何:

你的类
AA
应该满足三个要求:(1)相等的对象应该返回相同的
hashCode()
,(2)
compareTo()
应该与
equals()
一致,以及(3)对于
compareTo()
TreeSet
要正确工作,类应该实现
Comparable

我希望您可以自行添加
实现
条款(3)。对于(2),请参阅
Compariable
的文档。最简单的修复方法是重写
equals()
,即一个
AA
等于另一个
AA
具有相同
y
的值。不幸的是,这将中断(1),因为当前的
hashCode
方法也依赖于
z

因此,决定两个
AA
对象相等意味着什么。换句话说,给定
A
中的
classAaSet
AA
对象,这意味着集合已经包含这样一个
AA
。它有相同的
y
就足够了,还是应该有相同的
y
和相同的
z
?然后编码
equals()
hashCode()
比较()
,以反映您的决定


实际上,我相信
TreeSet
不使用
hashCode()
,因此在一个肮脏的解决方案中,即使根本不重写
hashCode()
,您也可以在不满足(1)的情况下生存。如果您的类在其他时间被用于新的上下文,您可能会遇到麻烦,因此我不推荐您使用它。

这个问题非常不清楚。如果将
A
放入
集合
中,它必须正确实现
equals()
hashCode()
,这是您尚未实现的。另外,您的问题没有提到
AA
AA
如何符合您的要求?什么是
ClassAA
java.util.TreeSet
对包含的对象使用
equals()
。您的问题可能恰恰相反:class
AA
没有实现
equals()
?很抱歉。。是的,我把它保留为空只是为了提问。所以我有一组a(我们称之为setOfA),每个a都有一组AA树。我还有一个A的对象(objOfA),它不在setOfA中,它与setOfA中的一个对象相同,因此setOfAs.contains(objOfA)必须返回true。但是由于每个A都有一个元素树集,树集虽然有一个覆盖的equals,但不会在那里被调用。。
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)
    }
}