Spec-Zone .ru
спецификации, руководства, описания, API
|
T
- тип объектов, по сравнению с которыми может быть этот объектpublic interface Comparable<T>
Списки (и массивы) объектов, которые реализуют этот интерфейс, могут быть сортированы автоматически Collections.sort
(и Arrays.sort
). Объекты, которые реализуют этот интерфейс, могут использоваться в качестве ключей в сортированной карте или в качестве элементов в сортированном наборе без потребности определить компаратор.
Естественное упорядочивание для класса, с которым C, как говорят, является непротиворечивым, равняется, если и только если у e1.compareTo(e2) == 0 есть то же самое булево значение как e1.equals(e2) для каждого e1 и e2 класса C. Отметьте, что null не является экземпляром любого класса, и e.compareTo(null) должен бросить NullPointerException даже при том, что e.equals(null) возвращает false.
Это строго рекомендуется (хотя не требуемый), с которым естественные упорядочивания являются непротиворечивыми, равняется. Это так, потому что сортированные наборы (и сортированные карты) без явных компараторов ведут себя "странно", когда они используются с элементами (или ключи), чье естественное упорядочивание непоследовательно с, равняется. В частности такой сортированный набор (или сортированная карта) нарушает общий контракт для набора (или карта), который определяется с точки зрения метода equals.
Например, если Вы добавляете два ключа a и b так, что (!a.equals(b) && a.compareTo(b) == 0) к сортированному набору, который не использует явный компаратор, вторая работа add возвращает false (и размер сортированного набора не увеличивается), потому что a и b эквивалентны с точки зрения сортированного набора.
Фактически у всех классов ядра Java, которые реализуют Comparable, есть естественные упорядочивания, которые являются непротиворечивыми с, равняется. Одним исключением является java.math.BigDecimal, естественное упорядочивание которого приравнивает объекты BigDecimal с равными значениями и различной точностью (такой как 4.0 и 4.00).
Для математически наклоненного, отношение, которое определяет естественное упорядочивание на данном классе C:
{(x, y) such that x.compareTo(y) <= 0}.Частное для этого полного порядка:
{(x, y) such that x.compareTo(y) == 0}.Это сразу следует из контракта для compareTo, что частное является отношением эквивалентности на C, и что естественное упорядочивание является полным порядком на C. То, когда мы говорим, что естественное упорядочивание класса является непротиворечивым с, равняется, мы подразумеваем, что частное для естественного упорядочивания является отношением эквивалентности, определенным классом
equals(Object)
метод:{(x, y) such that x.equals(y)}.
Этот интерфейс является элементом Платформы Наборов Java.
Comparator
int compareTo(T o)
Конструктор должен гарантировать sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) для всего x и y. (Это подразумевает, что x.compareTo(y) должен бросить эквивалентность исключения, y.compareTo(x) выдает исключение.)
Конструктор должен также гарантировать, что отношение является переходным: (x.compareTo(y)>0 && y.compareTo(z)>0) подразумевает x.compareTo(z)>0.
Наконец, конструктор должен гарантировать, что x.compareTo(y)==0 подразумевает что sgn(x.compareTo(z)) == sgn(y.compareTo(z)) для всего z.
Это строго рекомендуется, но не строго требуемое тот (x.compareTo(y)==0) == (x.equals(y)). Вообще говоря, любой класс, который реализует Comparable, взаимодействует через интерфейс, и нарушает это условие, должен ясно указать на этот факт. Рекомендуемый язык является "Примечанием: у этого класса есть естественное упорядочивание, которое непоследовательно с, равняется."
В предшествующем описании нотации sgn( expression) определяет математическую сигнум-функцию, которая определяется, чтобы возвратить один из -1, 0, или 1 согласно тому, отрицательно ли значение выражения, нуль или положительно.
o
- объект, который будет сравнен.NullPointerException
- если указанный объект является нулемClassCastException
- если тип указанного объекта препятствует тому, чтобы это было по сравнению с этим объектом.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.