Интерфейс Comparable<T>
- Параметры типа:
-
T- тип объектов, с которыми может быть сравнен этот объект
- Все известные подинтерфейсы:
-
AnnotationTypeDoc,AnnotationTypeElementDoc,ArrayType,ByteValue,CharValue,ChronoLocalDate,ChronoLocalDateTime<D>,Chronology,ChronoZonedDateTime<D>,ClassDoc,ClassType,ConstructorDoc,Delayed,Doc,DoubleValue,ExecutableMemberDoc,Field,FieldDoc,FloatValue,IntegerValue,InterfaceType,LocalVariable,Location,LongValue,MemberDoc,Method,MethodDoc,Name,PackageDoc,Path,ProcessHandle,ProgramElementDoc,ReferenceType,RootDoc,RunnableScheduledFuture<V>,ScheduledFuture<V>,SerialFieldTag,ShortValue
- Все известные реализующие классы:
-
AbstractChronology,AbstractRegionPainter.PaintContext.CacheMode,AccessMode,AclEntryFlag,AclEntryPermission,AclEntryType,AssociationChangeNotification.AssocChangeEvent,AttributeTree.ValueKind,Authenticator.RequestorType,BigDecimal,BigInteger,Boolean,Byte,ByteBuffer,Calendar,CardTerminals.State,CatalogFeatures.Feature,CertPathValidatorException.BasicReason,Character,Character.UnicodeScript,CharBuffer,Charset,ChronoField,ChronoUnit,ClientInfoStatus,CollationKey,Collector.Characteristics,Component.BaselineResizeBehavior,CompositeName,CompoundName,ConversionComparator.Comparison,CRLReason,CryptoPrimitive,Date,Date,DayOfWeek,Desktop.Action,Diagnostic.Kind,Diagnostic.Kind,Dialog.ModalExclusionType,Dialog.ModalityType,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,GraphicsDevice.WindowTranslucency,GregorianCalendar,GroupLayout.Alignment,HandlerResult,HijrahChronology,HijrahDate,HijrahEra,HttpClient.Redirect,HttpClient.Version,InquireType,Instant,IntBuffer,Integer,IsoChronology,IsoEra,JapaneseChronology,JapaneseDate,JavaFileObject.Kind,JConsoleContext.ConnectionState,JDBCType,JTable.PrintMode,KeyRep.Type,LambdaExpressionTree.BodyKind,LanguageVersion,LayoutStyle.ComponentPlacement,LdapName,LinkOption,LocalDate,LocalDateTime,Locale.Category,Locale.FilteringMode,Locale.IsoCountryCode,LocalTime,Long,LongBuffer,MappedByteBuffer,MemberReferenceTree.ReferenceMode,MemoryType,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,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,Snippet.Kind,Snippet.Status,Snippet.SubKind,SocketFlow.Status,SortOrder,SourceCodeAnalysis.Completeness,SourceVersion,SSLEngineResult.HandshakeStatus,SSLEngineResult.Status,StackWalker.Option,StandardCopyOption,StandardLocation,StandardNamespace,StandardOpenOption,StandardOperation,StandardProtocolFamily,String,StringBuffer,StringBuilder,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,Tree.Kind,TypeKind,URI,UserSessionEvent.Reason,UUID,VarHandle.AccessMode,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. Одно исключение - 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.
- С тех пор:
- 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(выражение) обозначает математическую функцию знак, которая определяется как возвращающая одно из значений -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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html