如何覆盖compareTo()。如果它是可能的

时间:2013-01-10 19:37:16

标签: java

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

idInteger时,我的代码可以正常工作,而且值为正值。 id可能是负值吗?如何更改代码?

4 个答案:

答案 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 ;

这是我想要的方式,但感谢您的回复