Javaで compareTo()
で0
を返す、1
を返す、および-1
を返すの違いは何ですか?
Comparable.compareTo(T) のリファレンスドキュメントから:
このオブジェクトと指定されたオブジェクトの順序を比較します。このオブジェクトは指定されたオブジェクトより小さい、等しい、または大きいため、負の整数、ゼロ、または正の整数を返します。
実装者は、すべての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インターフェイスを実装し、この条件に違反するクラスは、この事実を明確に示す必要があります。推奨される言語は、「注:このクラスには、等しいと矛盾する自然な順序があります。」
前述の説明では、表記sgn(expression)は、数式の値が負、ゼロ、正のいずれであるかに応じて、-1、0、または1のいずれかを返すように定義された数学符号関数を指定します。
要するに:
this.compareTo(that)
返却値
このメソッドの実装は、<
>
および==
の実際のセマンティクスを決定します(JavaのオブジェクトID演算子の意味で==
を意味するものではありません)
"abc".compareTo("def")
abc
はアルファベット順にdef
の前にあるため、0より小さい値が生成されます。
Integer.valueOf(2).compareTo(Integer.valueOf(1))
2は1より大きいため、0より大きい値を生成します。
注:Comparableを実装するクラスでは、javadocsでcompareTo()メソッドのセマンティクスを宣言することをお勧めします。
注:次の少なくとも1つを読む必要があります。
警告:compareToの戻り値が-1
、0
および1
であることに決して頼らないでください。常にx < 0
、x == 0
、x > 0
をそれぞれテストする必要があります。
私はこのニーモニックを使用します:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
符号を保持し、compareTo()
の結果を常に0と比較します
一言で言えば:(状況を検索する)
「a」と「b」を比較したい場合の例、すなわち(「a」== this)
ソートに使用できます。0は「等しい」を意味し、-1は1を意味し、「少ない」と「多い(大きい)」を意味します。
0より小さい戻り値は、左のオペランドが小さいことを意味し、値が0より大きい場合、左のオペランドは大きくなります。
int x = thisObject.compareTo(anotherObject);
compareTo()
メソッドは、次の特性を持つintを返します。
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject