[英]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.