web-dev-qa-db-ja.com

Comparable.compareToの戻り値はJavaで何を意味しますか?

Javaで compareTo()0を返す、1を返す、および-1を返すの違いは何ですか?

63
Magggi

公式の定義

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)

返却値

  • 負のint
  • if == that
  • 正の整数

このメソッドの実装は、<>および==の実際のセマンティクスを決定します(JavaのオブジェクトID演算子の意味で==を意味するものではありません)

"abc".compareTo("def")

abcはアルファベット順にdefの前にあるため、0より小さい値が生成されます。

Integer.valueOf(2).compareTo(Integer.valueOf(1))

2は1より大きいため、0より大きい値を生成します。

追加のポイント

注:Comparableを実装するクラスでは、javadocsでcompareTo()メソッドのセマンティクスを宣言することをお勧めします。

注:次の少なくとも1つを読む必要があります。

警告:compareToの戻り値が-10および1であることに決して頼らないでください。常にx < 0x == 0x > 0をそれぞれテストする必要があります。

82

私はこのニーモニックを使用します:

a.compareTo(b) < 0 // a < b

a.compareTo(b) > 0 // a > b

a.compareTo(b) == 0 // a == b

符号を保持し、compareTo()の結果を常に0と比較します

45
Colin Hebert

一言で言えば:(状況を検索する)

  • 1。compareTo()(return1
  • 1。compareTo(1)(return:)
  • 。comapreTo(1)(return-1
24
user1012506

「a」と「b」を比較したい場合の例、すなわち(「a」== this)

  1. a <bの場合は負の整数
  2. a == bの場合
  3. A> bの場合、正の整数
5
bhavesh

ソートに使用できます。0は「等しい」を意味し、-1は1を意味し、「少ない」と「多い(大きい)」を意味します。

0より小さい戻り値は、左のオペランドが小さいことを意味し、値が0より大きい場合、左のオペランドは大きくなります。

3
Michał Niklas
int x = thisObject.compareTo(anotherObject);

compareTo()メソッドは、次の特性を持つintを返します。

  • 負のIf thisObject < anotherObject
  • ゼロIf thisObject == anotherObject
  • 正のIf thisObject > anotherObject
2
Artur Yolchyan