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