Spec-Zone.ru › OpenJDK 21

Интерфейс 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, AttributeTree.ValueKind, Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, CardTerminals.State, CaseTree.CaseKind, CatalogFeatures.Feature, CertPathValidatorException.BasicReason, Character, Character.UnicodeScript, CharBuffer, Charset, ChronoField, ChronoUnit, 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.Origin, ElementType, Enum, File, FileTime, FileVisitOption, FileVisitResult, Float, 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, 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, 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, SignStyle, SimpleFileServer.OutputLevel, Snippet.Kind, Snippet.Status, Snippet.SubKind, SortOrder, SourceCodeAnalysis.Attribute, SourceCodeAnalysis.Completeness, SourceVersion, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, 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, 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 - если тип указанного объекта препятствует его сравнению с этим объектом.

© 1993, 2023, 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/21/docs/api/java.base/java/lang/Comparable.html

Spec-Zone.ru

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