モジュール java.base
パッケージ java.lang

インタフェース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, 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, VMOption.Origin, Window.Type, XPathEvaluationResult.XPathResultType, Year, YearMonth, ZonedDateTime, ZoneOffset, ZoneOffsetTransition, ZoneOffsetTransitionRule.TimeDefinition

public interface Comparable<T>
このインタフェースを実装する各クラスのオブジェクトに全体順序付けを強制します。 この順序付けはクラスの自然順序付けと呼ばれ、このクラスのcompareToメソッドは自然比較メソッドと呼ばれます。

このインタフェースを実装するオブジェクトのリスト(および配列)は、Collections.sort (およびArrays.sort)によって自動的にソートできます。 このインタフェースを実装するオブジェクトはソート・マップのキーとして使用したり、ソート・セットの要素として使用したりできますが、その際に、コンパレータを指定する必要はありません。

クラスCの自然順序付けがequalsと一貫性があると言われるのは、クラスCのすべてのe1e2について、e1.compareTo(e2)== 0e1.equals(e2)のboolean値が同じになる場合だけです。 nullはいずれのクラスのインスタンスでもないため、e.equals(null)falseを返す場合でもe.compareTo(null)NullPointerExceptionをスローすべきです。

自然順序付けでは、equalsと一貫性があることは、必須ではありませんが強く推奨されます。 これは、明示的なコンパレータを指定しないソート・セットやソート・マップを、自然順序付けがequalsと一貫性のない要素またはキーと一緒に使用すると、セットとマップの動作が保証されなくなるからです。 特に、このようなソート・セットまたはソート・マップは、セットまたはマップの一般的な規約に違反します。この規約は、equalsメソッドの用語を用いて定義されています。

たとえば、(!a.equals(b) && a.compareTo(b) == 0)となるような2つのキーabを、明示的なコンパレータを使用しないソート・セットに追加する場合、2つ目の追加操作ではfalseが返され、ソート・セットのサイズは増えません。これは、ソート・セットから見るとabは等価であるためです。

Comparableを実装するほとんどのJavaコア・クラスは、equalsと一貫性のある自然順序付けを持ちます。 1つの例外はjava.math.BigDecimalです。このクラスの自然順序付けでは、異なる精度の同じ値(4.0と4.00など)を持つ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)}. 

このインタフェースは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.2
関連項目:
Comparator
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    int compareTo​(T o)
    このオブジェクトと指定されたオブジェクトの順序を比較します。
  • メソッドの詳細

    • compareTo

      int compareTo​(T o)
      このオブジェクトと指定されたオブジェクトの順序を比較します。 このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数を返します。

      実装では、すべてのxyに対してsgn(x.compareTo(y))== -sgn(y.compareTo(x))が保証されなければいけません。 これは、y.compareTo(x)が例外をスローする場合はx.compareTo(y)も例外をスローすることを意味します。

      実装者は、関係が推移的であることも保証しなければならない: (x.compareTo(y) > 0 && y.compareTo(z) > 0)x.compareTo(z) > 0を意味します。

      さらに、すべてのzに対してx.compareTo(y)==0sgn(x.compareTo(z))== sgn(y.compareTo(z))を意味することも保証されなければいけません。

      必須というわけではありませんが、(x.compareTo(y)==0)==(x.equals(y))であることが強く推奨されます。 一般に、Comparableインタフェースを実装しているクラスで、この条件に違反するクラスはすべて、明確にこの事実を示す必要があります。 「ノート: このクラスはequalsと一貫性のない自然順序付けを持ちます」などと明示することをお薦めします。

      前述の説明において、sgn( expression )は、expressionの値がそれぞれ負、ゼロ、または正であるかどうかに従って、-10、または1のうちの1つを返すように定義された数学的signum関数を指定します。

      パラメータ:
      o -比較対象のオブジェクト。
      戻り値:
      このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数
      例外:
      NullPointerException - 指定されたオブジェクトがnullの場合
      ClassCastException - 指定されたオブジェクトの型が原因で、このオブジェクトと比較できない場合