Interface Comparable<T>

Type Parameters:
T - the type of objects that this object may be compared to
All Known Subinterfaces:
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
All Known Implementing Classes:
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 interfaceComparable<T>
This interface imposes a total ordering on the objects of each class thatimplements it. This ordering is referred to as the class'snaturalordering, and the class'scompareTo method is referred to asitsnatural comparison method.

Lists (and arrays) of objects that implement this interface can be sortedautomatically byCollections.sort (andArrays.sort). Objects that implement thisinterface can be used as keys in asorted map or aselements in asorted set, without the need tospecify acomparator.

The natural ordering for a classC is said to beconsistentwith equals if and only ife1.compareTo(e2) == 0 hasthe same boolean value ase1.equals(e2) for everye1 ande2 of classC. Note thatnullis not an instance of any class, ande.compareTo(null) shouldthrow aNullPointerException even thoughe.equals(null)returnsfalse.

It is strongly recommended (though not required) that natural orderings beconsistent with equals. This is so because sorted sets (and sorted maps)without explicit comparators behave "strangely" when they are used withelements (or keys) whose natural ordering is inconsistent with equals. Inparticular, such a sorted set (or sorted map) violates the general contractfor set (or map), which is defined in terms of theequalsmethod.

For example, if one adds two keysa andb such that(!a.equals(b) && a.compareTo(b) == 0) to a sortedset that does not use an explicit comparator, the secondaddoperation returns false (and the size of the sorted set does not increase)becausea andb are equivalent from the sorted set'sperspective.

Virtually all Java core classes that implementComparablehave natural orderings that are consistent with equals. Oneexception isBigDecimal, whosenatural ordering equatesBigDecimal objects with equal numerical values and differentrepresentations (such as 4.0 and 4.00). ForBigDecimal.equals() to return true,the representation and numerical value of the twoBigDecimal objects must be the same.

For the mathematically inclined, therelation that definesthe natural ordering on a given class C is:

      {(x, y) such that x.compareTo(y) <= 0}.
Thequotient for this total order is:
      {(x, y) such that x.compareTo(y) == 0}.
It follows immediately from the contract forcompareTo that thequotient is anequivalence relation onC, and that thenatural ordering is atotal order onC. When we say that aclass's natural ordering isconsistent with equals, we mean that thequotient for the natural ordering is the equivalence relation defined bythe class'sequals(Object) method:
    {(x, y) such that x.equals(y)}.

In other words, when a class's natural ordering is consistent withequals, the equivalence classes defined by the equivalence relationof theequals method and the equivalence classes defined bythe quotient of thecompareTo method are the same.

This interface is a member of theJava Collections Framework.

Since:
1.2
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    Compares this object with the specified object for order.
  • Method Details

    • compareTo

      int compareTo(T o)
      Compares this object with the specified object for order. Returns anegative integer, zero, or a positive integer as this object is lessthan, equal to, or greater than the specified object.

      The implementor must ensuresignum(x.compareTo(y)) == -signum(y.compareTo(x)) forallx andy. (This implies thatx.compareTo(y) must throw an exception if and only ify.compareTo(x) throws an exception.)

      The implementor must also ensure that the relation is transitive:(x.compareTo(y) > 0 && y.compareTo(z) > 0) impliesx.compareTo(z) > 0.

      Finally, the implementor must ensure thatx.compareTo(y)==0 implies thatsignum(x.compareTo(z))== signum(y.compareTo(z)), for allz.

      API Note:
      It is strongly recommended, butnot strictly required that(x.compareTo(y)==0) == (x.equals(y)). Generally speaking, anyclass that implements theComparable interface and violatesthis condition should clearly indicate this fact. The recommendedlanguage is "Note: this class has a natural ordering that isinconsistent with equals."
      Parameters:
      o - the object to be compared.
      Returns:
      a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
      Throws:
      NullPointerException - if the specified object is null
      ClassCastException - if the specified object's type prevents it from being compared to this object.