2013-05-16 30 views
3
實現比較接口時實現對象的自然順序

的:不同類型可比

說,如果我們有類賬戶:

class Account 
{ 
    Account(String name, int id) 
    int balance() 
    void deposit(int n) 
} 

我們想要的兩個賬戶,以便賬戶餘額排序

什麼這兩種方法之間之探源?

public class comparebalances implements Comparable <Account> 
{ 

    public int compare (Account acc1, Account acc2) 
    { 
     return acc1.balance()-acc2.balance(); 
    } 

} 

public class comparebalances implements Comparable <Account> 
{ 

    public int compare (Account acc1, Account acc2) 
    { 
     if (acc1.balance()> acc2.balance()) 
      return 1; 
     else if (acc1.balance()< acc2.balance()) 
      return -1; 
     else if (acc1.balance()==acc2.balance()) 
      return 0; 
    } 

} 
+0

如果你可以保證'balance()'總是> = 0,那麼第一種方法實際上很好。如果不能,那麼你就可以結束了超越int'的'負值範圍內,所以你需要使用比較操作在第二個例子。 – dlev

+0

這段代碼編譯,甚至('INT平衡()',沒有分號,等)? – Abubakkar

+1

不,我從我的頭頂寫了這個例子,還沒有編程它。試圖從我自己的例子中瞭解它是如何工作的。 – joker

回答

3

第二個是更安全的,因爲第一個可提供用於極端值(整數溢出)錯誤的結果。

+0

+1這是一個更好的觀點,我刪除了我的答案。 –

3

由於深褐色已經寫,二是更安全的地方整數溢出會給你帶來意想不到的輸出。如果你希望它同時又短又安全,你可以這樣寫:

return Integer.compare(acc1.balance(), acc2.balance()); 
+0

恩,很好,這是自Java SE 7以來的新方法。不知道。似乎甚至在基元而不是包裝類上工作。 – Puce