0
public int compareTo(Object obj){
   Books bk = (Books) bk;
   return this.id - obj.id;
}

我的代码在什么时候工作正常,什么时候idInteger一个正值。有可能id是负值吗?如何更改代码?

4

4 回答 4

2

以下可能是实现它的最简单方法:

public int compareTo(Object obj) {
   Books bk = (Books)obj;
   return Integer.compare(this.id, bk.id);
}

您当前的版本几乎是正确的,只是它容易受到整数溢出的影响。

于 2013-01-10T19:39:06.467 回答
1

当您覆盖时,compareTo您可以定义这些问题的答案。id是否可能为负值完全取决于您的程序。您必须问自己的问题是“一本书比另一本书‘更大’(或更小)意味着什么?”。如果答案是更大的 id 就是更大的 Book,那么你的实现很好,除了一个小错误:

public int compareTo(Object obj){
   Books bk = (Books) obj;
   return this.id - bk.id;
}
于 2013-01-10T19:40:42.793 回答
0

我让它工作了:D

return (this.id > bk.id ) ? -1: (this.id < bk.id) ? 1:0 ;

这符合我的要求,但感谢您的回复

于 2013-01-10T19:44:09.130 回答
0

必须能够返回负值。从Comparable规范中,如果

a.compareTo(b) > 0

然后

b.compareTo(a) < 0

否则你不能compareTo()用来建立订单

于 2013-01-10T19:40:57.187 回答