在Java中使用TreeSet

时间:2014-02-28 18:39:07

标签: java class treeset

我创建了自己的类,我想创建我的TreeSet。我的班级看起来像这样:

class mytree implements Comparable
{
    int line_no;
    line_segment line[];

    public int compareTo(Object obj)
    {
        tree t = (tree)obj;
        if(this.line_no == t.line_no)
            return 0;
        if(this.line[line_no]>t.line[line_no])
            return 1;
        else
            return -1;

    }
}

我正在定义类的新对象,然后将它们插入到TreeSet中。 在我发现的情况下 像

这样的价值观
mytree up = tree.lower(n1);
mytree down = tree.higher(n2);

但是如果我尝试检查树中是否存在up和down的值,那么有时会发生树表示树中不存在值,有时它表示值确实存在。虽然我在比较方法中处理了0的情况,但是在我创建树时可能出现的错误。

2 个答案:

答案 0 :(得分:0)

    if(this.line_no == t.line_no)
        return 0;
    if(this.line[line_no]>t.line[line_no])
        return 1;

您在这两项检查中比较了两种不同的东西。我希望你应该比较同样的事情,例如。

    if(this.line_no == t.line_no)
        return 0;
    if(this.line_no > t.line_no)
        return 1;

    // also note you probably mean t.line[t.line_no] instead of t.line[line_no]
    if(this.line[line_no] == t.line[t.line_no])
        return 0;
    if(this.line[line_no]>t.line[t.line_no])
        return 1;

答案 1 :(得分:0)

此代码中存在许多错误。首先,您根本不尊重Java约定。其次,你没有使用泛型,就好像我们还在2004年,当时Java 5还不存在。第三,您的类不代表树,因此不应将其命名为mytree。第四,你的compareTo()方法是错误的。它应该是对称的:

A> B< ==> B<甲

如果A和B的line[line_no]相等,那么如果将它们与A.compareTo(B)进行比较,则比较方法将返回-1。如果将它们与B.compareTo(A)进行比较,它也将返回-1。所以你有A< B和B< A同时。