2013-01-10 25 views
0
public int compareTo(Object obj){ 
    Books bk = (Books) bk; 
    return this.id - obj.id; 
} 

我的代码在idInteger的时候工作正常,什么时候是正值。 id可能是负值吗?如何更改代码?如何覆盖compareTo()。如果有可能的话

+0

您使用的是Java 1.4吗?从Java 5开始,“Comparable”被生成。 – fge

回答

0

我做了它的工作:d

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

这个工作方式我希望如此,但感谢您的回复

+0

您的原始实施与此一样有效。 – SJuan76

+1

@ SJuan76不完全。如果id可能非常大,则由于环绕,减法可能会给出不同的,可能不正确的结果。例如,Integer.MAX_VALUE - ( - 3)是负数。做比较总是有效的。 –

+0

@PatriciaShanahan好的,谢谢。 – SJuan76

2

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

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

您当前的版本几乎是正确的,但它易受整数溢出。

1

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

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

我会使用“之前”或“之后”比“更大”更好,但无论如何+1。 – SJuan76

0

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

a.compareTo(b) > 0 

然后

b.compareTo(a) < 0 

否则你不能使用compareTo()嘱咐的为了