Spec-Zone.ru › OpenJDK 25

Интерфейс Comparable<T>

Параметры типа:
T - тип объектов, с которыми можно сравнивать этот объект
Все известные подинтерфейсы:
ArrayType, ByteValue, CharValue, ChronoLocalDate, ChronoLocalDateTime<D>, Chronology, ChronoZonedDateTime<D>, ClassType, Delayed, DoubleValue, Field, FloatValue, IntegerValue, InterfaceType, LocalVariable, Location, LongValue, Method, Name, Path, ProcessHandle, ReferenceType, RunnableScheduledFuture<V>, ScheduledFuture<V>, ShortValue
Все известные реализующие классы:
AbstractChronology, AbstractRegionPainter.PaintContext.CacheMode, AccessFlag, AccessFlag.Location, AccessMode, AclEntryFlag, AclEntryPermission, AclEntryType, AssociationChangeNotification.AssocChangeEvent, AttributeMapper.AttributeStability, AttributeTree.ValueKind, Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, CardTerminals.State, CaseTree.CaseKind, CatalogFeatures.Feature, CatalogResolver.NotFoundAction, CertPathValidatorException.BasicReason, Character, Character.UnicodeScript, CharBuffer, Charset, ChronoField, ChronoUnit, ClassFile.AttributesProcessingOption, ClassFile.ConstantPoolSharingOption, ClassFile.DeadCodeOption, ClassFile.DeadLabelsOption, ClassFile.DebugElementsOption, ClassFile.LineNumbersOption, ClassFile.ShortJumpsOption, ClassFile.StackMapsOption, ClassFileFormatVersion, ClientInfoStatus, CollationKey, Collector.Characteristics, Component.BaselineResizeBehavior, CompositeName, CompoundName, ConversionComparator.Comparison, CRLReason, CryptoPrimitive, Date, Date, DayOfWeek, Desktop.Action, Diagnostic.Kind, Dialog.ModalExclusionType, Dialog.ModalityType, DirectMethodHandleDesc.Kind, Doclet.Option.Kind, DocletEnvironment.ModuleMode, DocTree.Kind, DocumentationTool.Location, Double, DoubleBuffer, DrbgParameters.Capability, DropMode, Duration, ElementKind, Elements.DocCommentKind, Elements.Origin, ElementType, Enum, File, FileTime, FileVisitOption, FileVisitResult, Float, Float16, FloatBuffer, FocusEvent.Cause, FormatStyle, Formatter.BigDecimalLayoutForm, FormSubmitEvent.MethodType, Future.State, GraphicsDevice.WindowTranslucency, GregorianCalendar, GroupLayout.Alignment, HandlerResult, HijrahChronology, HijrahDate, HijrahEra, HotSpotDiagnosticMXBean.ThreadDumpFormat, HttpClient.Redirect, HttpClient.Version, InquireType, Instant, IntBuffer, Integer, IsoChronology, IsoEra, JapaneseChronology, JapaneseDate, JavaFileObject.Kind, JConsoleContext.ConnectionState, JDBCType, JTable.PrintMode, KeyRep.Type, LambdaExpressionTree.BodyKind, LayoutStyle.ComponentPlacement, LdapName, LinkOption, ListFormat.Style, ListFormat.Type, LocalDate, LocalDateTime, Locale.Category, Locale.FilteringMode, Locale.IsoCountryCode, LocalTime, Long, LongBuffer, MappedByteBuffer, MemberReferenceTree.ReferenceMode, MemoryType, MethodHandles.Lookup.ClassOption, MinguoChronology, MinguoDate, MinguoEra, Modifier, ModuleDescriptor, ModuleDescriptor.Exports, ModuleDescriptor.Exports.Modifier, ModuleDescriptor.Modifier, ModuleDescriptor.Opens, ModuleDescriptor.Opens.Modifier, ModuleDescriptor.Provides, ModuleDescriptor.Requires, ModuleDescriptor.Requires.Modifier, ModuleDescriptor.Version, ModuleElement.DirectiveKind, ModuleTree.ModuleKind, Month, MonthDay, MultipleGradientPaint.ColorSpaceType, MultipleGradientPaint.CycleMethod, NestingKind, Normalizer.Form, NumberFormat.Style, NumericShaper.Range, ObjectInputFilter.Status, ObjectName, ObjectStreamField, OffsetDateTime, OffsetTime, Opcode, Opcode.Kind, PeerAddressChangeNotification.AddressChangeEvent, PKIXReason, PKIXRevocationChecker.Option, PosixFilePermission, ProcessBuilder.Redirect.Type, Proxy.Type, PseudoColumnUsage, QuitStrategy, Rdn, RecordingState, ResolverStyle, RetentionPolicy, RoundingMode, RowFilter.ComparisonType, RowIdLifetime, RowSorterEvent.Type, Runtime.Version, Short, ShortBuffer, Signature.TypeArg.Bounded.WildcardIndicator, SignStyle, SimpleFileServer.OutputLevel, Snippet.Kind, Snippet.Status, Snippet.SubKind, SortOrder, SourceCodeAnalysis.Attribute, SourceCodeAnalysis.Completeness, SourceVersion, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, StackMapFrameInfo.SimpleVerificationTypeInfo, StackWalker.Option, StandardCopyOption, StandardLocation, StandardNamespace, StandardOpenOption, StandardOperation, StandardProtocolFamily, String, StringBuffer, StringBuilder, StructuredTaskScope.Subtask.StatePREVIEW, SwingWorker.StateValue, System.Logger.Level, Taglet.Location, Taskbar.Feature, Taskbar.State, TaskEvent.Kind, TextStyle, ThaiBuddhistChronology, ThaiBuddhistDate, ThaiBuddhistEra, Thread.State, Time, Timestamp, TimeUnit, TrayIcon.MessageType, Tree.Kind, TypeAnnotation.TargetType, TypeAnnotation.TypePathComponent.Kind, TypeKind, TypeKind, URI, UserSessionEvent.Reason, UUID, VarHandle.AccessMode, VectorShape, VMOption.Origin, Window.Type, XPathEvaluationResult.XPathResultType, 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. Исключением является BigDecimal, естественный порядок которого считает равными объекты BigDecimal с одинаковыми числовыми значениями, но разными представлениями (например, 4.0 и 4.00). Чтобы BigDecimal.equals() вернул true, представление и числовое значение двух объектов BigDecimal должны совпадать.

Для тех, кто знаком с математикой, отношение, задающее естественный порядок на данном классе 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)}. 

Иными словами, когда естественный порядок класса согласован с equals, классы эквивалентности, определенные отношением эквивалентности метода equals, совпадают с классами эквивалентности, определенными фактор-множеством метода compareTo.

Этот интерфейс входит в состав Java Collections Framework.

С версии:
1.2
См. также:
  • Comparator

Краткое описание методов

Модификатор и тип Метод Описание
int compareTo(T o)
Сравнивает этот объект с указанным объектом по порядку.

Подробное описание методов

compareTo

int compareTo(T o)
Сравнивает этот объект с указанным объектом по порядку. Возвращает отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше указанного объекта соответственно.

Реализующий интерфейс должен гарантировать signum(x.compareTo(y)) == -signum(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 влечет signum(x.compareTo(z)) == signum(y.compareTo(z)) для всех z.

Примечание к API:
Настоятельно рекомендуется, но не является строгим требованием, чтобы (x.compareTo(y)==0) == (x.equals(y)). Как правило, любой класс, реализующий интерфейс Comparable и нарушающий это условие, должен явно указывать на этот факт. Рекомендуемая формулировка: «Примечание: естественный порядок этого класса не согласован с equals».
Параметры:
o - объект для сравнения.
Возвращает:
отрицательное целое число, ноль или положительное целое число, если этот объект меньше, равен или больше указанного объекта соответственно.
Выбрасывает:
NullPointerException - если указанный объект равен null
ClassCastException - если тип указанного объекта не позволяет сравнить его с этим объектом.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Comparable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API