Spec-Zone.ru › OpenJDK 24

Интерфейс 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.

С:
1.2
См. также:
  • Comparator
END_OF_DOCUMENT_MARKER

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

Модификатор и тип Метод Описание
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 - если тип указанного объекта не позволяет сравнить его с этим объектом.

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Comparable.html

Spec-Zone.ru

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