Страницы

Поиск по вопросам

четверг, 18 октября 2018 г.

Чем отличается Comparable от Comparator?

Когда использовать Comparable, а когда Comparator?


Ответ

Классы реализуют Comparable, чтоб можно было потом сортировать за счёт реализации compareTo(Object) метода.
Если класс реализует этот интерфейс, то можно использовать потом Collection.sort() или Arrays.sort(). Объекты будут сортироваться основываясь на реализации compareTo(Object) метода.
Например:
public class Country implements Comparable{
@Override public int compareTo(Country country) { return (this.countryId < country.countryId ) ? -1: (this.countryId > country.countryId ) ? 1:0 ; } }
При вызове Collection.sort() на коллекции объектов этого класса, они будут сравниваться основываясь на compareTo(Country country)
А Comparator используется, чтоб реализовать сортировку по кастомному полю, типо:
List listOfCountries = new ArrayList(); [...] Collections.sort(listOfCountries,new Comparator() {
@Override public int compare(Country o1, Country o2) {
return o1.getCountryName().compareTo(o2.getCountryName()); } });
Будут отсортированы объекты основываясь на сравнении имён стран.
Если резюмировать, то:
Comparable - реализуется внутри класса. По сути, определяет обычный/естественный порядок сравнения объектов.
Comparator - реализуется вне класса. Можно реализовать различные варианты сортировки, основанные на сравнении различных полей.

Комментариев нет:

Отправить комментарий