public int compareTo(Object obj){
Books bk = (Books) bk;
return this.id - obj.id;
}
id
为Integer
时,我的代码可以正常工作,而且值为正值。 id
可能是负值吗?如何更改代码?
答案 0 :(得分:2)
以下可能是实施它的最简单方法:
public int compareTo(Object obj) {
Books bk = (Books)obj;
return Integer.compare(this.id, bk.id);
}
您当前的版本几乎是正确的,除了它容易出现整数溢出。
答案 1 :(得分:1)
当您覆盖compareTo
时,您可以定义这些问题的答案。这完全取决于您的程序id
是否可能为负值。你必须问自己的问题是“一本书比另一本书更大(或更小)是什么意思?”。如果答案就是哪一个更大的id是一本更大的书,那么你的实现是好的,除了一个小错误:
public int compareTo(Object obj){
Books bk = (Books) obj;
return this.id - bk.id;
}
答案 2 :(得分:0)
您必须才能返回负值。来自Comparable
规范,如果
a.compareTo(b) > 0
然后
b.compareTo(a) < 0
否则您无法使用compareTo()
来建立订单
答案 3 :(得分:0)
我做到了:D
return (this.id > bk.id ) ? -1: (this.id < bk.id) ? 1:0 ;
这是我想要的方式,但感谢您的回复