- 型パラメータ:
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,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,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,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と一貫性があると言われるのは、クラスCのすべてのe1とe2について、e1.compareTo(e2)== 0とe1.equals(e2)のboolean値が同じになる場合だけです。 nullはいずれのクラスのインスタンスでもないため、e.equals(null)がfalseを返す場合でもe.compareTo(null)はNullPointerExceptionをスローすべきです。
自然順序付けでは、equalsと一貫性があることは、必須ではありませんが強く推奨されます。 これは、明示的なコンパレータを指定しないソート・セットやソート・マップを、自然順序付けがequalsと一貫性のない要素またはキーと一緒に使用すると、セットとマップの動作が保証されなくなるからです。 特に、このようなソート・セットまたはソート・マップは、セットまたはマップの一般的な規約に違反します。この規約は、equalsメソッドの用語を用いて定義されています。
たとえば、(!a.equals(b) && a.compareTo(b) == 0)となるような2つのキーaとbを、明示的なコンパレータを使用しないソート・セットに追加する場合、2つ目の追加操作ではfalseが返され、ソート・セットのサイズは増えません。これは、ソート・セットから見るとaとbは等価であるためです。
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
-
メソッドの詳細
-
compareTo
int compareTo(T o)このオブジェクトと指定されたオブジェクトの順序を比較します。 このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数を返します。実装では、すべての
xとyに対して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)==0がsgn(x.compareTo(z))== sgn(y.compareTo(z))を意味することも保証されなければいけません。必須というわけではありませんが、
(x.compareTo(y)==0)==(x.equals(y))であることが強く推奨されます。 一般に、Comparableインタフェースを実装しているクラスで、この条件に違反するクラスはすべて、明確にこの事実を示す必要があります。 「注: このクラスはequalsと一貫性のない自然順序付けを持ちます」などと明示することをお薦めします。前述の説明において、
sgn(expression)は、expressionの値がそれぞれ負、ゼロ、または正であるかどうかに従って、-1、0、または1のうちの1つを返すように定義された数学的signum関数を指定します。- パラメータ:
o-比較対象のオブジェクト。- 戻り値:
- このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数
- 例外:
NullPointerException- 指定されたオブジェクトがnullの場合ClassCastException- 指定されたオブジェクトの型が原因で、このオブジェクトと比較できない場合
-