Главная » Java » Упорядочение элементов: Comparable и Comparator

0

 

  Интерфейс Java. lang.Comparable допускает реализацию любым классом, объекты которого могут быть отсортированы по какому-либо критерию. В составе интерфейса объявлен единственный метод, описанный ниже.

public int compareTo(Object other)

Возвращает отрицательное, нулевое или положительное значение, если те-, кущий объект соответственно "меньше" объекта other, равен тому или "превышает" его. Если метод возвращает нуль, метод equals, примененный для сравнения тех же объектов, должен вернуть значение true; в иных случаях equals обязан возвратить false. Если объекты взаимно несопоставимы (скажем, Integer заведомо нельзя сравнивать со String), выбрасывается исключение типа ClassCastException.

  Критерий сравнения, определяемый методом compareTo, задает правило естественного упорядочения (natural ordering) объектов класса, в наибольшей мере отвечающее их природе. Аналогично, метод equals обусловливает правило естественной равнозначности (natural equivalence).

 Многие из существующих классов представляют собой реализации интерфейса Comparable, включая String, Java. io. File, Java, util. Date и все клас-сы-оболочки (wrapper classes) простых типов (кроме Boolean). В большинстве этих классов реализован как общий метод compareTo, так и его специальные разновидности, отвечающие существу конкретного типа. Например, в составе класса Short присутствуют и метод compareTo (Object), и его перегруженная форма CompareTo(Short); второй вариант позволяет избежать необходимости °нтроля типов на этапе выполнения программы — подобную проверку осущест-яет первый вариант метода, дабы гарантировать, что переданный параметр Действительно относится к типу Short. Компилятор по возможности всегда использует частные формы метода compareTo.

 Если конкретный класс не реализует интерфейс Comparable либо правило тественного упорядочения, предлагаемое классом, по каким-либо причинам не верно, в качестве альтернативы Comparable зачастую вполне возможно использовать объект java.util. Comparator. Интерфейс Comparator содержит, в частности, метод compare, описанный ниже.

 public int compare(Object  ol,  Object o2)

Задает правило упорядочения двух объектов, аналогичное тому, которое

реализуется методом Comparable.compareTo.

   Объекты Comparable и Comparator могут использоваться для сортировки и поиска данных в списках List с помощью статических методов sort и binarySearch класса Collections. В классе Collections (обращайтесь к разделу 16.8.3 на странице 460) также определены методы min и шах, возвращающие соответственно наименьший и наибольший элементы коллекции.

Сравнение строк без учета регистра символов относится к числу достаточно общих задач, и специально для этой цели в составе класса String предусмотрен объект Comparator, доступный в виде поля String.CASE_INSENSITIVE_ORDER.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии