|
Spec-Zone .ru
спецификации, руководства, описания, API
|
T - тип объектов, которые могут быть сравнены этим компаратором@FunctionalInterface public interface Comparator<T>
Collections.sort или Arrays.sort) позволить точное управление порядком сортировки. Компараторы могут также использоваться, чтобы управлять порядком определенных структур данных (такой как sorted sets или sorted maps), или обеспечить упорядочивание для наборов объектов, у которых нет a natural ordering.Упорядочивание, наложенное компаратором, которому равняется c на ряде элементов, с которыми S, как говорят, является непротиворечивым, если и только если у c.compare(e1, e2)==0 есть то же самое булево значение как e1.equals(e2) для каждого e1 и e2 в S.
Предостережение должно быть осуществлено при использовании компаратора, способного к наложению упорядочивания, непоследовательного с, равняется, чтобы упорядочить сортированный набор (или сортированная карта). Предположите сортированный набор (или сортированная карта) с явным компаратором, c используется с элементами (или ключи) оттянутый из набора S. Если упорядочивание, наложенное c на S, непоследовательно с, равняется, сортированный набор (или сортированная карта) будет вести себя "странно". В особенности сортированный набор (или сортированная карта) нарушит общий контракт для набора (или карта), который определяется с точки зрения equals.
Например, предположите, что каждый добавляет два элемента a и b так, что (a.equals(b) && c.compare(a, b) != 0) к пустому TreeSet с компаратором c. Второе add работа возвратит true (и размер древовидного набора увеличится), потому что a и b не эквивалентны с точки зрения древовидного набора, даже при том, что это противоречит спецификации Set.add метод.
Отметьте: Это - обычно хорошая идея для компараторов, чтобы также реализовать java.io.Serializable, поскольку они могут использоваться в качестве упорядочивания методов в сериализуемых структурах данных (как TreeSet, TreeMap). Для структуры данных, чтобы сериализировать успешно, компаратор (если обеспечено) должен реализовать Serializable.
Для математически наклоненного, отношение, которое определяет наложенное упорядочивание, которое данный компаратор c налагает на данный набор объектов, которые S:
{(x, y) such that c.compare(x, y) <= 0}.
Частное для этого полного порядка:
{(x, y) such that c.compare(x, y) == 0}.
Это сразу следует из контракта для compare, что частное является отношением эквивалентности на S, и что наложенное упорядочивание является полным порядком на S. То, когда мы говорим, что упорядочивание, наложенное c на S, является непротиворечивым с, равняется, мы подразумеваем, что частное для упорядочивания является отношением эквивалентности, определенным объектами equals(Object) метод (ы):
{(x, y) such that x.equals(y)}.
В отличие от этого Comparable, компаратор может дополнительно разрешить сравнение нулевых параметров, поддерживая требования для отношения эквивалентности.
Этот интерфейс является элементом Платформы Наборов Java.
Comparable, Serializable| Модификатор и Тип | Метод и Описание |
|---|---|
int |
compare(T o1, T o2)
Сравнивает его два параметра за порядок.
|
boolean |
equals(Object obj)
Указывает, " ли некоторый другой объект равен" этому компаратору.
|
default Comparator<T> |
reverseOrder()
Возвращает компаратор, который налагает обратное упорядочивание этого компаратора.
|
default Comparator<T> |
thenComparing(Comparator<? super T> other)
Создает лексикографический компаратор порядка с другим компаратором.
|
default <U extends Comparable<? super U>> |
thenComparing(Function<? super T,? extends U> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
Comparable ключ. |
default Comparator<T> |
thenComparing(ToDoubleFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
double значение. |
default Comparator<T> |
thenComparing(ToIntFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
int значение. |
default Comparator<T> |
thenComparing(ToLongFunction<? super T> keyExtractor)
Создает лексикографический компаратор порядка с функцией, которая извлекает a
long значение. |
int compare(T o1, T o2)
В предшествующем описании нотации sgn( expression) определяет математическую сигнум-функцию, которая определяется, чтобы возвратить один из -1, 0, или 1 согласно тому, отрицательно ли значение выражения, нуль или положительно.
Конструктор должен гарантировать что sgn(compare(x, y)) == -sgn(compare(y, x)) для всего x и y. (Это подразумевает, что compare(x, y) должен выдать исключение, если и только если compare(y, x) выдает исключение.)
Конструктор должен также гарантировать, что отношение является переходным: ((compare(x, y)>0) && (compare(y, z)>0)) подразумевает compare(x, z)>0.
Наконец, конструктор должен гарантировать, что compare(x, y)==0 подразумевает что sgn(compare(x, z))==sgn(compare(y, z)) для всего z.
Это обычно имеет место, но не строго требуемое тот (compare(x, y)==0) == (x.equals(y)). Вообще говоря, любой компаратор, который нарушает это условие, должен ясно указать на этот факт. Рекомендуемый язык является "Примечанием: этот компаратор налагает упорядочивания, которые непоследовательны с, равняется."
o1 - первый объект, который будет сравнен.o2 - второй объект, который будет сравнен.NullPointerException - если параметром является нуль, и этот компаратор не разрешает нулевые параметрыClassCastException - если типы параметров препятствуют тому, чтобы они были сравнены этим компаратором.boolean equals(Object obj)
Object.equals(Object). Дополнительно, этот метод может возвратить true, только если указанный объект является также компаратором, и это налагает то же самое упорядочивание как этот компаратор. Таким образом, comp1.equals(comp2) подразумевает что sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2)) для каждой ссылки на объект o1 и o2.Отметьте, что всегда безопасно не переопределить Object.equals(Object). Однако, переопределение этого метода может, в некоторых случаях, улучшить производительность, позволяя программы решить, что два отличных компаратора налагают тот же самый порядок.
equals в class Objectobj - ссылочный объект, с которым можно сравниться.true только если указанный объект является также компаратором, и он налагает то же самое упорядочивание как этот компаратор.Object.equals(Object), Object.hashCode()default Comparator<T> reverseOrder()
default Comparator<T> thenComparing(Comparator<? super T> other)
Comparator<Person> byLastName может быть составлен с другим Comparator<Person> byFirstName, тогда byLastName.thenComparing(byFirstName) создает a Comparator<Person> какие виды фамилией, и для равных видов фамилий именем.other - другой компаратор, используемый, когда равняется на этом.NullPointerException - если параметром является нуль.default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor)
Comparable ключ. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor)).U - Comparable введите для сравненияkeyExtractor - функция, используемая, чтобы извлечь Comparable ключ сортировкиNullPointerException - если параметром является нуль.Comparators.comparing(Function), thenComparing(Comparator)default Comparator<T> thenComparing(ToIntFunction<? super T> keyExtractor)
int значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor)).keyExtractor - функция, используемая, чтобы извлечь целочисленное значениеNullPointerException - если параметром является нуль.Comparators.comparing(ToIntFunction), thenComparing(Comparator)default Comparator<T> thenComparing(ToLongFunction<? super T> keyExtractor)
long значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor)).keyExtractor - функция, используемая, чтобы извлечь длинное значениеNullPointerException - если параметром является нуль.Comparators.comparing(ToLongFunction), thenComparing(Comparator)default Comparator<T> thenComparing(ToDoubleFunction<? super T> keyExtractor)
double значение. Эта реализация по умолчанию вызовы thenComparing(this, Comparators.comparing(keyExtractor)).keyExtractor - функция, используемая, чтобы извлечь двойное значениеNullPointerException - если параметром является нуль.Comparators.comparing(ToDoubleFunction), thenComparing(Comparator)
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92