|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
このインタフェースを実装する各クラスのオブジェクトに全体順序付けを強制します。この順序付けはクラスの「自然順序付け」と呼ばれ、このクラスの compareTo メソッドは「自然比較メソッド」と呼ばれます。
このインタフェースを実装するオブジェクトのリストおよび配列は、Collections.sort および Arrays.sort によって自動的にソートできます。このインタフェースを実装するオブジェクトは、コンパレータを指定しなくても、ソートされたマップのキーまたはソートされたセットの要素として使用できます。
クラス C のすべての e1 と e2 に対して (e1.compareTo((Object)e2)==0) が e1.equals((Object)e2) と同じ boolean 値を持つ場合にだけ、クラスの自然順序付けは equals と一貫性があると言うことができます。
自然順序付けでは、equals と一貫性があることは、必須ではありませんが強く推奨されます。これは、明示的なコンパレータを指定しないソートされたセットやソートされたマップを、自然順序付けが equals と一貫性のない要素またはキーと一緒に使用すると、セットとマップの動作が保証されなくなるからです。特に、このようなソートされたセットまたはソートされたマップは、セットまたはマップの一般的な規約に違反します。この規約は、equals オペレーションの用語を用いて定義されています。
たとえば、(a.equals((Object)b) && a.compareTo((Object)b) != 0) に該当する 2 つのキー a と b を、明示的なコンパレータを指定しないソートされたセットに加えると、a と b はソートされたセットの観点からは等価なので、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)}.
Comparator
,
Collections.sort(java.util.List)
,
Arrays.sort(Object[])
,
SortedSet
,
SortedMap
,
TreeSet
,
TreeMap
メソッドの概要 | |
int |
compareTo(Object o)
このオブジェクトと指定されたオブジェクトの順序を比較します。 |
メソッドの詳細 |
public int compareTo(Object 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 と一貫性のない自然順序付けを持ちます」などと明示することをお勧めします。
o
- 比較対象の ObjectClassCastException
- 指定されたオブジェクトの型が原因で、この Object と比較できない場合
|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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.