2013-05-16 7 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 balance()', no semi-colons и т. Д.)? – Abubakkar

+1

nah, я написал этот пример с верхней части головы, не программировал его. Просто пытаюсь понять, как это будет работать на моих собственных примерах. – joker

ответ

3

Второй является более безопасным, так как первая может обеспечить неправильные результаты для экстремальных значений (целочисленное переполнение).

+0

+1 Это лучшая точка зрения, я удалил свой ответ. –

3

Как уже писал Пьюс, второй безопаснее, когда переполнение целых чисел даст вам неожиданный результат. Если вы хотите, чтобы это было короткое и безопасное в одно и то же время, вы можете написать:

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

Эх, хорошо, это новый метод, так как Java SE 7. Не знал об этом. Кажется даже работать на примитивах, а не на классах-оболочках. – Puce

Смежные вопросы