匹敵する<タイプ>クラス内のcompareToを実装する際に、特定の問題で符号付き整数していますか?

StackOverflow https://stackoverflow.com/questions/2633794

  •  26-09-2019
  •  | 
  •  

質問

compareTo()を実装するときは、

は、「差異」の必要性の度合いが考慮されるべきでしょうか?

例えば、私は、C1

万一C1.compareTo(C2)はC2.compareTo(C3)

未満の整数を返します 以下のために(私は問題ではない程度を推測しているように、 Comparableインタフェースのドキュメントは、一つの方法または別のものを指定していないようだが、特定の番号を返すいくつかの利点があるかどうかを知るためにいいだろうたとえば、)TreeSetのソート速度や何かを改善します。

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

役に立ちましたか?

解決

興味深い質問は、それにもかかわらず、一切、intの大きさはComparable<T>Comparator<T>仕様、符号のみあたりとしては意味を持ちません。おそらくいくつかのソートアルゴリズムは、さらに、彼らは大きさから「ヒント」を取ることができるように指定することができますが、私はよく分からないどのように実用的な私たちは本当に知っている唯一の必要があるため、比較に基づくソートのためになることならばa < ba == b、またはa > b(これ)のOOPの抽象化であるかComparableComparator本当にます。

<時間>

さて、それはつまり、数値を比較するための減算イディオムを使用してのここに隠された意図があるかもしれないことを言わなければ、このような何か必要があります:

public int compare(T t1, T t2) {
    return t1.intField - t2.intField;
}
この比較方法は、2つの数の差がInteger.MAX_VALUEより大きい場合、が潜在的にの、可能なオーバーフローに起因する破損していることを

ドゥ・ノート。実際には、これは のジャワのpuzzlers のでカバーパズルの一つです。

証明するために、(本から撮影した)次のスニペットを考えてみます:

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

明らかにx < z、まだx - zは正の数です。この減算のイディオムを使用しての用心:それは代わりに、明示的な比較とreturn -10、または1を行うには、常にはるかに安全です。

他のヒント

のない、唯一の違いは、負の数、0、および正の数との間です。度は無関係である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top