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

How do I say that an object is present in a Set that also has a treeset?

我有 s 组对象 A

Class A {

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

    }
    @Override 
    public int hashCode(){

    }
}

其他class:

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 实现。

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

如果您发布的代码在可以编译的范围内是正确的,那就更清楚了。总之:

您的 class AA 应满足三个要求:(1) 相等对象应 return 相同 hashCode(),(2) compareTo() 应与 equals() 一致,并且 (3) compareTo()TreeSet 正常工作,class 应该实现 Comparable<AA>.

希望大家可以自行添加implements第(3)条。对于 (2),请查看 Comparable 的文档。最简单的解决方法是重写 equals(),使 AA 等于另一个具有相同 yAA。不幸的是,这会破坏 (1),因为当前的 hashCode 方法也依赖于 z

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

实际上,我认为 TreeSet 不使用 hashCode(),因此在肮脏的解决方案中,您可以在不满足 (1) 的情况下生活,甚至根本不覆盖 hashCode()。如果您的 class 在其他时间用于新上下文,您可能会遇到麻烦,因此我不推荐它。