public int compareTo(Object obj){
Books bk = (Books) bk;
return this.id - obj.id;
}
我的代码在id
是Integer
的时候工作正常,什么时候是正值。 id
可能是负值吗?如何更改代码?如何覆盖compareTo()。如果有可能的话
public int compareTo(Object obj){
Books bk = (Books) bk;
return this.id - obj.id;
}
我的代码在id
是Integer
的时候工作正常,什么时候是正值。 id
可能是负值吗?如何更改代码?如何覆盖compareTo()。如果有可能的话
以下是可能实现它的最简单的方法:
public int compareTo(Object obj) {
Books bk = (Books)obj;
return Integer.compare(this.id, bk.id);
}
您当前的版本几乎是正确的,但它易受整数溢出。
当您覆盖compareTo
时,您可以定义这些问题的答案。它完全取决于你的程序是否有可能使id
成为负值。你必须问自己的问题是:“一本书比另一本更大”(或更小)“意味着什么?”。如果答案仅仅是其曾经拥有更大的ID是一个较大的书,那么你的实现是很好,除了一个小的失误:
public int compareTo(Object obj){
Books bk = (Books) obj;
return this.id - bk.id;
}
我会使用“之前”或“之后”比“更大”更好,但无论如何+1。 – SJuan76
您必须能够返回负值。从Comparable
规范,如果
a.compareTo(b) > 0
然后
b.compareTo(a) < 0
否则你不能使用compareTo()
嘱咐的为了
您使用的是Java 1.4吗?从Java 5开始,“Comparable”被生成。 – fge