Интерфейс 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
- См. также:
Краткое описание методов
Подробное описание методов
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