匹敵する<タイプ>クラス内のcompareToを実装する際に、特定の問題で符号付き整数していますか?
-
26-09-2019 - |
質問
は、「差異」の必要性の度合いが考慮されるべきでしょうか?
例えば、私は、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 < b
、a == b
、またはa > b
(これ)のOOPの抽象化であるかComparable
とComparator
本当にます。
さて、それはつまり、数値を比較するための減算イディオムを使用してのここに隠された意図があるかもしれないことを言わなければ、このような何か必要があります:
を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 -1
、0
、または1
を行うには、常にはるかに安全です。
他のヒント
のない、唯一の違いは、負の数、0、および正の数との間です。度は無関係である。