私が学んでいるJavaの教科書では、これは「辞書式順序」を使用して整数を返すと書かれています。私はそれがどのように機能するかを理解していますが、これがプログラミングで使用される特定の方法は何ですか?
7 に答える
組み込みのすべてのソート方法は、非プリミティブをソートするときにそれを使用します
コップ一杯の水を並べ替えたいとしましょう。オブジェクト自体は と呼ばれGlass
ます。
Glass
ここで、缶に高さと保持する水の量があるとしましょう。
ここで、2 つの を比較したいとしましょうGlasses
。どのようにしますか?
メソッドをオーバーライドすることでこれを行いますcompareTo
。その方法では、2 つのグラスが同じ高さで、同じ量の水が入っている場合、それらは等しいと言えます。明らかに、大なり小なりのロジックが必要ですが、アイデアは得られます。
並べ替えが必要なコレクションになるカスタム クラスがある場合、ここにすべてのカスタム ロジックを配置して、比較対象のオブジェクトとの関係でオブジェクトの順序を決定します。 .
String
たとえば、sを並べ替えることができます。< 0
値、、、= 0
またはアルファベット順で先行する> 0
かどうかに応じて戻ります。String
compareTo は値を比較し、値がより小さいか、等しいか、より大きいかを示す int を返します。
クラス オブジェクトに自然な順序がある場合は、Comparable インターフェイスを実装し、このメソッドを定義します。自然順序付けを持つすべての Java クラスがこれを実装します (String、Double、BigInteger など)。
compareTo メソッドは、次の条件を満たす必要があります。
- x & y が異なる場合、 x.compareTo(y) は y.compareTo(x) の反対の符号です
- x.compareTo(y) > 0 かつ y.compareTo(z) > 0 の場合、x.compareTo(z) > 0 です。
- equals() との一貫性が推奨されます。
参考文献:
http://leepoint.net/notes-java/data/expressions/22compareobjects.html
http://www.javapractices.com/topic/TopicAction.do?Id=10
compareTo() は、Java で非プリミティブ型のデフォルトの合計順序を表す標準的な方法です。
整数を返す利点は、<、==、および > の 3 つのケースを区別するために一度だけ呼び出す必要があることです。(たとえば、メソッド equals() および greaterThan() を使用する別の方法では、2 つの呼び出しが必要になります。)
一括発注が必要な場所ならどこでも使用できます。最も重要なものは次のとおりです。
TreeSet や TreeMap などのソートされたコレクションの実装用 (これらは赤黒の木を使用します)。
コレクションを明示的にソートする場合。
他のアルゴリズムでは、たとえば、有理数のようなユーザー定義の数値型の範囲。
最も一般的な用途は、文字列のリストを並べ替えるときの比較関数です。を 1 回呼び出すと、compareTo
ある文字列が別の文字列の前に来るか、別の文字列の後に来るか、別の文字列と同じかがわかります。