CDC 1.1.2

java.lang
インタフェース Comparable

既知の実装クラスの一覧:
BigInteger, Byte, Character, Date, Double, File, Float, Integer, Long, ObjectStreamField, Short, String

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 オブジェクトは等価とみなされます。注:java.math.BigDecimal は、J2ME Foundation Profile などの J2ME CDC プロファイルにあります。

数学的には、任意のクラス C に対して自然順序付けを定義する「順序関係」は次のようになります。

       {(x, y) such that x.compareTo((Object)y) <= 0}.
 
The quotient for this total order is:
       {(x, y) such that x.compareTo((Object)y) == 0}.
 
compareTo の規約から判断して、商が C で「同値関係」にあり、自然順序付けが C の「全体順序」であるということは明らかです。クラスの自然順序付けが equals と一貫性があるということは、自然順序付けの商がクラスの次の equals(Object) メソッドで定義される同値関係になることを意味します。
     {(x, y) such that x.equals((Object)y)}.
 

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

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

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

メソッドの詳細

compareTo

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 と比較できない場合

CDC 1.1.2

Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. Use of this specification is subject to license terms.