JavaTM Platform
Standard Ed. 6

java.lang
インタフェース Comparable<T>

型パラメータ:
T - このオブジェクトが比較されるオブジェクトの型
既知のサブインタフェースの一覧:
Delayed, Name, RunnableScheduledFuture<V>, ScheduledFuture<V>
既知の実装クラスの一覧:
Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, Character, CharBuffer, Charset, ClientInfoStatus, CollationKey, Component.BaselineResizeBehavior, CompositeName, CompoundName, Date, Date, Desktop.Action, Diagnostic.Kind, Dialog.ModalExclusionType, Dialog.ModalityType, Double, DoubleBuffer, DropMode, ElementKind, ElementType, Enum, File, Float, FloatBuffer, Formatter.BigDecimalLayoutForm, FormSubmitEvent.MethodType, GregorianCalendar, GroupLayout.Alignment, IntBuffer, Integer, JavaFileObject.Kind, JTable.PrintMode, KeyRep.Type, LayoutStyle.ComponentPlacement, LdapName, Long, LongBuffer, MappedByteBuffer, MemoryType, MessageContext.Scope, Modifier, MultipleGradientPaint.ColorSpaceType, MultipleGradientPaint.CycleMethod, NestingKind, Normalizer.Form, ObjectName, ObjectStreamField, Proxy.Type, Rdn, Resource.AuthenticationType, RetentionPolicy, RoundingMode, RowFilter.ComparisonType, RowIdLifetime, RowSorterEvent.Type, Service.Mode, Short, ShortBuffer, SOAPBinding.ParameterStyle, SOAPBinding.Style, SOAPBinding.Use, SortOrder, SourceVersion, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, StandardLocation, String, SwingWorker.StateValue, Thread.State, Time, Timestamp, TimeUnit, TrayIcon.MessageType, TypeKind, URI, UUID, WebParam.Mode, XmlAccessOrder, XmlAccessType, XmlNsForm

public interface Comparable<T>

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

このインタフェースを実装するオブジェクトのリストおよび配列は、Collections.sort および Arrays.sort によって自動的にソートできます。このインタフェースを実装するオブジェクトは、コンパレータを指定しなくても、ソートされたマップ のキーまたは ソートされたセット の要素として使用できます。

C クラスの自然順序付けは、C クラスのすべての e1 および e2 について、e1.compareTo(e2) == 0e1.equals(e2) と同じ boolean 値を保持する場合にだけ、「equals との一貫性」を保持します。null は、いずれのクラスのインスタンスでもありません。 e.equals(null)false を返す場合でも、e.compareTo(null)NullPointerException を返します。

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

たとえば、(!a.equals(b) && a.compareTo(b) == 0) に該当する 2 つのキー ab を、明示的なコンパレータを指定しないソートされたセットに加えると、ab はソートされたセットの観点からは等価なので、2 番目の add オペレーションは false を返し、ソートされたセットのサイズは大きくなりません。

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) という表記は数学関数 signum 関数を示し、expression の値 (負の数、ゼロ、正の数) に応じて、-101 のどれかを返します。

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

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。