|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
T
- このオブジェクトが比較されるオブジェクトの型public interface Comparable<T>
このインタフェースを実装する各クラスのオブジェクトに全体順序付けを強制します。この順序付けはクラスの「自然順序付け」と呼ばれ、このクラスの compareTo メソッドは「自然比較メソッド」と呼ばれます。
このインタフェースを実装するオブジェクトのリストおよび配列は、Collections.sort
および Arrays.sort
によって自動的にソートできます。このインタフェースを実装するオブジェクトは、コンパレータを指定しなくても、ソートされたマップ のキーまたは ソートされたセット の要素として使用できます。
C クラスの自然順序付けは、C クラスのすべての e1 および e2 について、e1.compareTo(e2) == 0 が e1.equals(e2) と同じ boolean 値を保持する場合にだけ、「equals との一貫性」を保持します。null は、いずれのクラスのインスタンスでもありません。 e.equals(null) が false を返す場合でも、e.compareTo(null) は NullPointerException を返します。
自然順序付けでは、equals と一貫性があることは、必須ではありませんが強く推奨されます。これは、明示的なコンパレータを指定しないソートされたセットやソートされたマップを、自然順序付けが equals と一貫性のない要素またはキーと一緒に使用すると、セットとマップの動作が保証されなくなるからです。特に、このようなソートされたセットまたはソートされたマップは、セットまたはマップの一般的な規約に違反します。 この規約は、equals メソッドの用語を用いて定義されています。
たとえば、(!a.equals(b) && a.compareTo(b) == 0) に該当する 2 つのキー a と b を、明示的なコンパレータを指定しないソートされたセットに加えると、a と b はソートされたセットの観点からは等価なので、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 のメンバーです。
Comparator
メソッドの概要 | |
---|---|
int |
compareTo(T o)
このオブジェクトと指定されたオブジェクトの順序を比較します。 |
メソッドの詳細 |
---|
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) という表記は数学関数 signum 関数を示し、expression の値 (負の数、ゼロ、正の数) に応じて、-1、0、1 のどれかを返します。
o
- 比較対象のオブジェクト
ClassCastException
- 指定されたオブジェクトの型が原因で、このオブジェクトと比較できない場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。