Интерфейс Comparable<T>
- Параметры типа:
-
T- тип объектов, с которыми может быть сравнен этот объект
- Все известные подинтерфейсы:
- ChronoLocalDate, ChronoLocalDateTime<D>, Chronology, ChronoZonedDateTime<D>, Delayed, Name, Path, RunnableScheduledFuture<V>, ScheduledFuture<V>
- Все известные реализующие классы:
- AbstractChronology, AbstractRegionPainter.PaintContext.CacheMode, AccessMode, AclEntryFlag, AclEntryPermission, AclEntryType, AddressingFeature.Responses, Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, CertPathValidatorException.BasicReason, Character, Character.UnicodeScript, CharBuffer, Charset, ChronoField, ChronoUnit, ClientInfoStatus, CollationKey, Collector.Characteristics, Component.BaselineResizeBehavior, CompositeName, CompoundName, CRLReason, CryptoPrimitive, Date, Date, DayOfWeek, Desktop.Action, Diagnostic.Kind, Dialog.ModalExclusionType, Dialog.ModalityType, DocumentationTool.Location, Double, DoubleBuffer, DropMode, Duration, ElementKind, ElementType, Enum, File, FileTime, FileVisitOption, FileVisitResult, Float, FloatBuffer, FormatStyle, Formatter.BigDecimalLayoutForm, FormSubmitEvent.MethodType, GraphicsDevice.WindowTranslucency, GregorianCalendar, GroupLayout.Alignment, HijrahChronology, HijrahDate, HijrahEra, Instant, IntBuffer, Integer, IsoChronology, IsoEra, JapaneseChronology, JapaneseDate, JavaFileObject.Kind, JDBCType, JTable.PrintMode, KeyRep.Type, LayoutStyle.ComponentPlacement, LdapName, LinkOption, LocalDate, LocalDateTime, Locale.Category, Locale.FilteringMode, LocalTime, Long, LongBuffer, MappedByteBuffer, MemoryType, MessageContext.Scope, MinguoChronology, MinguoDate, MinguoEra, Modifier, Month, MonthDay, MultipleGradientPaint.ColorSpaceType, MultipleGradientPaint.CycleMethod, NestingKind, Normalizer.Form, NumericShaper.Range, ObjectName, ObjectStreamField, OffsetDateTime, OffsetTime, PKIXReason, PKIXRevocationChecker.Option, PosixFilePermission, ProcessBuilder.Redirect.Type, Proxy.Type, PseudoColumnUsage, Rdn, ResolverStyle, Resource.AuthenticationType, RetentionPolicy, RoundingMode, RowFilter.ComparisonType, RowIdLifetime, RowSorterEvent.Type, Service.Mode, Short, ShortBuffer, SignStyle, SOAPBinding.ParameterStyle, SOAPBinding.Style, SOAPBinding.Use, SortOrder, SourceVersion, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, StandardCopyOption, StandardLocation, StandardOpenOption, StandardProtocolFamily, String, SwingWorker.StateValue, TextStyle, ThaiBuddhistChronology, ThaiBuddhistDate, ThaiBuddhistEra, Thread.State, Time, Timestamp, TimeUnit, TrayIcon.MessageType, TypeKind, URI, UUID, WebParam.Mode, Window.Type, XmlAccessOrder, XmlAccessType, XmlNsForm, Year, YearMonth, ZonedDateTime, ZoneOffset, ZoneOffsetTransition, ZoneOffsetTransitionRule.TimeDefinition
public interface Comparable<T>
Этот интерфейс накладывает полное упорядочение на объекты каждого класса, реализующего его. Это упорядочение называется естественным упорядочением класса, а метод класса compareTo называется его естественным методом сравнения.
Списки (и массивы) объектов, реализующих этот интерфейс, могут быть отсортированы автоматически с помощью Collections.sort (и Arrays.sort). Объекты, реализующие этот интерфейс, могут использоваться в качестве ключей в отсортированном отображении или в качестве элементов в отсортированном наборе, без необходимости указывать компаратор.
Естественное упорядочение для класса C называется совместимым с equals тогда и только тогда, когда e1.compareTo(e2) == 0 имеет такое же булево значение, как e1.equals(e2) для каждого e1 и e2 класса C. Обратите внимание, что null не является экземпляром какого-либо класса, и e.compareTo(null) должен выбрасывать исключение NullPointerException, даже если e.equals(null) возвращает false.
Настоятельно рекомендуется (хотя это не обязательно), чтобы естественные упорядочения были совместимы с equals. Это связано с тем, что отсортированные наборы (и отсортированные отображения) без явных компараторов ведут себя «странно», когда они используются с элементами (или ключами), чьё естественное упорядочение несовместимо с equals. В частности, такой отсортированный набор (или отсортированное отображение) нарушает общее соглашение для набора (или отображения), которое определяется с помощью метода equals.
Например, если добавить два ключа a и b такие, что (!a.equals(b) && a.compareTo(b) == 0) в отсортированный набор, который не использует явного компаратора, вторая операция add возвращает false (и размер отсортированного набора не увеличивается), потому что a и b эквивалентны с точки зрения отсортированного набора.
Практически все ядровые классы Java, реализующие Comparable, имеют естественные упорядочения, совместимые с equals. Одно исключение — 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, мы подразумеваем, что частное для естественного упорядочения — это отношение эквивалентности, определённое методом equals(Object) класса:{(x, y) such that x.equals(y)}.
Этот интерфейс является частью Java Collections Framework.
- Since:
- 1.2
- См. также:
Comparator
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
compareTo(T o) Сравнивает этот объект с указанным объектом для определения порядка. |
Методы
compareTo
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 и нарушающий это условие, должен ясно указать этот факт. Рекомендуемый способ — "Примечание: этот класс имеет естественное упорядочение, несовместимое с equals."
В вышеописанном описании обозначение sgn(выражение) обозначает математическую функцию signum, которая определена как возвращающая одно из -1, 0, или 1 в зависимости от того, является ли значение выражения отрицательным, нулевым или положительным.
- Параметры:
-
o- сравниваемый объект. - Возвращает:
- отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше указанного объекта.
- Исключения:
-
NullPointerException- если указанный объект равен null -
ClassCastException- если тип указанного объекта не позволяет сравнить его с этим объектом.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.