Интерфейс 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,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,ClientInfoStatus,CLinker.TypeKind,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,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,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,Snippet.Kind,Snippet.Status,Snippet.SubKind,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,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
- См. также:
Краткое описание методов
Подробное описание методов
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, 2021, 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/17/docs/api/java.base/java/lang/Comparable.html