Javaでのreturn 、0
return、returnの違いは何ですか?1
-1
compareTo()
7 に答える
正式な定義
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 インターフェースを実装し、この条件に違反するクラスは、この事実を明確に示す必要があります。推奨される言語は、「注: このクラスには、equals と矛盾する自然な順序付けがあります。」
上記の説明で、sgn(expression) という表記は、expression の値が負、ゼロ、正のいずれであるかに応じて、-1、0、または 1 のいずれかを返すように定義された数学的な符号関数を指定します。
私のバージョン
要するに:
this.compareTo(that)
戻り値
- this < that の場合は負の整数
- これ == それの場合は0
- this > that の場合は正の整数
このメソッドの実装によって、<
>
andの実際のセマンティクスが決定されます ( Java のオブジェクト識別演算子の意味では==
ありません)。==
例
"abc".compareTo("def")
abc
の前のアルファベット順のように、0 より小さい値が生成されdef
ます。
Integer.valueOf(2).compareTo(Integer.valueOf(1))
2 は 1 より大きいため、0 より大きい値が返されます。
いくつかの追加ポイント
注: Comparable を実装するクラスでは、javadoc でその compareTo() メソッドのセマンティクスを宣言することをお勧めします。
注:以下の少なくとも 1 つを読む必要があります。
- Sun Java チュートリアルの Collection TrailのObject Orderingセクション
- Joshua Bloch による効果的な Java、特に項目 12: Comparable の実装を検討する
- Java Generics and Collections by Maurice Naftalin, Philip Wadler, Chapter 3.1: Comparable
警告:-1
compareTo の戻り値が,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)
- a < b の場合は負の整数
- a == bの場合
- a > b の場合は正の整数
並べ替えに使用でき、0 は「等しい」を意味し、-1 は「少ない」および「多い(多い)」を意味します。
戻り値が 0 より小さい場合は、左側のオペランドが小さいことを意味し、値が 0 より大きい場合は左側のオペランドが大きいことを意味します。