如何在具有树集的Set中出现对象?

时间:2016-09-22 17:24:34

标签: java set treeset

我有一组对象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实现。

2 个答案:

答案 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个对象的相同含义。换句话说,在classAaSetA对象中给定AA,意味着该集合已包含此类AA。它是否足以具有相同的y或者是否应该具有相同的y和相同的z?然后编写代码equals()hashCode()compareTo()以反映您的决定。

实际上,我认为TreeSet不使用hashCode(),所以在一个肮脏的解决方案中,即使没有覆盖hashCode(),也可以在没有履行(1)的情况下生活。如果你的课程在其他时间被用于新的环境中,你可能会遇到麻烦,所以我不推荐它。