簡體   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