8

compareTo() を実装する場合、「差異」の程度を考慮する必要がありますか?

たとえば、C1、C2、C3 の 3 つのオブジェクトがあり、C1 < C2 < C3 となります。

C1.compareTo(C2) は C2.compareTo(C3) より小さい整数を返す必要がありますか?

Comparable インターフェースのドキュメントは何らかの方法を指定していないようですので、程度は問題ではないと推測していますが、特定の数値を返す利点があるかどうかを知っておくとよいでしょう (たとえば、 TreeSet ソート速度または何か)。

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo(T)

4

2 に答える 2

4

興味深い質問ですが、それでもなお、の大きさは仕様intに従って重要ではComparable<T>なくComparator<T>、符号のみです。おそらく、いくつかのソートアルゴリズムは、マグニチュードから「ヒント」を取得できることを追加で指定できますが、実際a < bには、、、、a == bまたはa > b(実際にはのOOP抽象化Comparableとは何ですか)。Comparator


ここで、数値を比較するために減算イディオムを使用するという隠された意図があるかもしれないと言う必要があります。つまり、次のようなものです。

public int compare(T t1, T t2) {
    return t1.intField - t2.intField;
}

2つの数値の差が。より大きい場合、オーバーフローが発生する可能性があるため、この比較方法は壊れている可能性があることに注意してくださいInteger.MAX_VALUE。実際、これはJavaパズルの対象となるパズルの1つです。

実例を示すために、次のスニペット(本から抜粋)を検討してください。

int x = -2000000000;
int z = 2000000000;
System.out.println(x - z); // prints a positive number due to overflow

明らかx < zに、それでもx - z正の数です。return -1この減算イディオムの使用には注意してください。明示的な比較と、、、0またはの1代わりに行う方が常にはるかに安全です。

于 2010-04-14T01:28:36.620 に答える
2

いいえ、唯一の違いは、負の数、0、および正の数の間です。程度は関係ありません。

于 2010-04-13T23:06:43.597 に答える