public int compareTo(Object obj){
Books bk = (Books) bk;
return this.id - obj.id;
}
我的代码在什么时候工作正常,什么时候id
是Integer
一个正值。有可能id
是负值吗?如何更改代码?
public int compareTo(Object obj){
Books bk = (Books) bk;
return this.id - obj.id;
}
我的代码在什么时候工作正常,什么时候id
是Integer
一个正值。有可能id
是负值吗?如何更改代码?
以下可能是实现它的最简单方法:
public int compareTo(Object obj) {
Books bk = (Books)obj;
return Integer.compare(this.id, bk.id);
}
您当前的版本几乎是正确的,只是它容易受到整数溢出的影响。
当您覆盖时,compareTo
您可以定义这些问题的答案。id
是否可能为负值完全取决于您的程序。您必须问自己的问题是“一本书比另一本书‘更大’(或更小)意味着什么?”。如果答案是更大的 id 就是更大的 Book,那么你的实现很好,除了一个小错误:
public int compareTo(Object obj){
Books bk = (Books) obj;
return this.id - bk.id;
}
我让它工作了:D
return (this.id > bk.id ) ? -1: (this.id < bk.id) ? 1:0 ;
这符合我的要求,但感谢您的回复
您必须能够返回负值。从Comparable
规范中,如果
a.compareTo(b) > 0
然后
b.compareTo(a) < 0
否则你不能compareTo()
用来建立订单