JavaTM 2 Platform
Std. Ed. v1.3

java.lang
インタフェース Comparable

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

public interface Comparable

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

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

クラス C のすべての e1e2 に対して (e1.compareTo((Object)e2)==0)e1.equals((Object)e2) と同じ boolean 値を持つ場合にだけ、クラスの自然順序付けは equals と一貫性があると言うことができます。

自然順序付けでは、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 など) を持つ BigDecimals を等価と見なします。

数学的には、任意のクラス 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)
このオブジェクトと指定されたオブジェクトの順序を比較します。このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数を返します。

実装では、すべての 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.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

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