2013-01-10 48 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()囑咐的爲了