繁体   English   中英

在Java中使用TreeSet

[英]Using TreeSet in Java

我已经创建了自己的类,想要创建我的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值,则有时会发生树说树中不存在值,有时会说值确实存在的情况。 尽管我在compare方法中处理了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;

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

A> B <==> B <A

如果A和B的line[line_no]相等,则如果将它们与A.compareTo(B)进行比较,则比较方法将返回-1。 并且,如果将它们与B.compareTo(A)进行比较,它也会返回-1。 因此,您同时拥有A <B和B <A。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM