JavaTM 2
Platform
Std. Ed. v1.4.0

java.lang
インタフェース Comparable

既知の実装クラスの一覧:
BigDecimal, BigInteger, Byte, ByteBuffer, Character, CharBuffer, Charset, CollationKey, Date, Double, DoubleBuffer, File, Float, FloatBuffer, IntBuffer, Integer, Long, LongBuffer, ObjectStreamField, Short, ShortBuffer, String, URI

public interface Comparable

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

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

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

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

たとえば、(!a.equals((Object)b) && a.compareTo((Object)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((Object)y) <= 0}.
 
この全体順序の「商」は次のとおりです。
       {(x, y) such that x.compareTo((Object)y) == 0}.
 
compareTo の規約から判断して、商が C で「同値関係」にあり、自然順序付けが C の「全体順序」であるということは明らかです。クラスの自然順序付けが equals と一貫性があるということは、自然順序付けの商がクラスの次の equals(Object) メソッドで定義される同値関係になることを意味します。
     {(x, y) such that x.equals((Object)y)}.
 

導入されたバージョン:
1.2
関連項目:
Comparator, Collections.sort(java.util.List), Arrays.sort(Object[]), SortedSet, SortedMap, TreeSet, TreeMap

メソッドの概要
 int compareTo(Object o)
          このオブジェクトと指定されたオブジェクトの順序を比較します。
 

メソッドの詳細

compareTo

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

前述の説明では、sgn(expression) という表記は数学関数 signum 関数を示し、expression の値 (負の数、ゼロ、正の数) に応じて -101 のどれかを返します。実装では、すべての 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 と一貫性のない自然順序付けを持ちます」などと明示することをお勧めします。

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

JavaTM 2
Platform
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.