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



我有一组对象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等于另一个具有相同yAA。不幸的是,这将破坏(1(,因为当前的hashCode方法也依赖于z

因此,决定两个AA对象相等意味着什么。换句话说,给定A中的classAaSetAA对象,这意味着集合已经包含这样的AA。对它来说,拥有相同的y就足够了吗?还是应该同时拥有同样的yz?然后对equals()hashCode()compareTo()进行编码,以反映您的决定。

事实上,我相信TreeSet不使用hashCode(),所以在脏的解决方案中,即使根本不覆盖hashCode(),也可以不满足(1(。如果你的类在其他时间被用在新的上下文中,你可能会遇到麻烦,所以我不推荐它。

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

相关内容

最新更新