こんにちは!エンジニアの中沢です。
Javaには値や文字列の大小を比較するためのcompareToメソッドがあります。
この記事では、
- compareToメソッドとは
- String型の文字列を比較する方法
- Dateクラスの日付を比較する方法
- BigDecimalの値を比較する方法
という基本的な内容から、
- Integerなどのラッパークラスで値を比較する方法
- Comparatorで配列のソートをする方法
- ComparatorでListのソートをする方法
- ComparatorでMapのソートをする方法
などの応用的な使い方に関しても解説していきます。
今回はこれらの方法を覚えるために、compareToメソッドのさまざまな使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
compareToメソッドとは
compareToメソッドは値や文字列を比較するために使います。
equalsメソッドの等しいかどうかの比較とは違い、compareToメソッドでは比較した値のどちらが大きいか、または同じかを比較することができます。
また、文字列を比較する場合はcompareToIgnoreCaseメソッドを使って、文字列の大文字と小文字を区別せずに比較する事ができます。
compareToメソッドは次のように記述します。
変数1.compareTo(変数2)
このときの戻り値で大小関係を把握することができます。
戻り値は次の通りです。
- メソッドの呼び出し元の値(変数1)が、引数の値(変数2)より小さい場合は”負の値”
- メソッドの呼び出し元の値(変数1)が、引数の値(変数2)より大きい場合は”正の値”
- メソッドの呼び出し元の値(変数1)が、引数の値(変数2)と同じ場合は”0”
戻り値の覚え方は「左の値 – 右の値」
compareToメソッドは戻り値が正の値か、負の値かで大小関係を把握します。
しかし、この戻り値が正の値のときはどちらが大きいのかを忘れてしまうことがよくあります。
そこで、戻り値の簡単な覚え方を紹介します。戻り値の覚え方は、「左の値 – 右の値」になると覚えてみてださい!
compareToメソッドの戻り値を次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { Integer num1 = new Integer(1); Integer num2 = new Integer(2); System.out.println(num1.compareTo(num2)); System.out.println(num2.compareTo(num1)); System.out.println(num1.compareTo(num1)); } }
[実行結果]
-1 1 0
このように、左の値が大きい場合には正の値、右の値の方が大きければ負の値になります。
戻り値を間違えないために、ぜひこの覚え方を試してみてください!
compareToメソッドの使い方
String型の文字列を比較する方法
compareToメソッドでは文字列のUnicode値がどれだけ離れているかを辞書的に比較します。
compareToメソッドを使って文字列を比較する方法を次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { String str1 = "a"; String str2 = "b"; String str3 = "A"; System.out.println(str1.compareTo(str2)); System.out.println(str2.compareTo(str1)); System.out.println(str1.compareTo(str1)); System.out.println("compareToIgnoreCaseとの違い"); System.out.println(str1.compareTo(str3)); System.out.println(str1.compareToIgnoreCase(str3)); } }
[実行結果]
-1 1 0 compareToIgnoreCaseとの違い 32 0
compareToメソッドの戻り値は、引数で指定した文字列が辞書的に後になる場合に負の値を返します。逆に辞書的に前になる場合は正の値を返し、同じ場合は”0”を返します。
compareToIgnoreCaseメソッドを使えば、文字列の大文字と小文字を区別せずに比較する事ができます。
String型の文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
Dateクラスの日付を比較する方法
compareToメソッドで日付を比較する事もできます。
次のプログラムで確認してみましょう。
import java.util.Date; public class Main { public static void main(String[] args) { Date date1 = new Date(2017, 3, 28, 16, 20, 22); Date date2 = new Date(2017, 3, 29, 16, 20, 24); System.out.println(date1.compareTo(date2)); System.out.println(date2.compareTo(date1)); System.out.println(date1.compareTo(date1)); } }
[実行結果]
-1 1 0
compareToメソッドで日付を比較する場合の戻り値は次の通りです。
- メソッドの呼び出し元の日付が、引数の日付より前の場合は”-1”
- メソッドの呼び出し元の日付が、引数の日付より後の場合は”1”
- メソッドの呼び出し元の日付が、引数の日付と同じ場合は”0”
日付を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
BigDecimalの値を比較する方法
compareToメソッドでBigDecimalの値を比較する事もできます。
次のプログラムで確認してみましょう。
import java.math.BigDecimal; public class Main { public static void main(String[] args) { BigDecimal zero = new BigDecimal(0); BigDecimal one = new BigDecimal(1); System.out.println(zero.compareTo(one)); System.out.println(one.compareTo(zero)); System.out.println(zero.compareTo(zero)); } }
[実行結果]
-1 1 0
compareToメソッドでBigDecimalの値を比較する場合の戻り値は次の通りです。
- メソッドの呼び出し元の値が、引数の値より小さい場合は”-1”
- メソッドの呼び出し元の値が、引数の値より大きい場合は”1”
- メソッドの呼び出し元の値が、引数の値と同じ場合は”0”
BigDecimalの値を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
Integerなどのラッパークラスで値を比較する方法
Integerなどのラッパークラスを使えば、値をcompareToメソッドで比較することもできます。
public class Main { public static void main(String[] args) { Integer num1 = new Integer(1); Integer num2 = new Integer(10); System.out.println(num1.compareTo(num2)); System.out.println(num2.compareTo(num1)); System.out.println(num1.compareTo(num1)); } }
[実行結果]
-1 1 0
ラッパークラスを使ってcompareToメソッドで値を比較する場合の戻り値は次の通りです。
- メソッドの呼び出し元の値が、引数の値より小さい場合は”-1”
- メソッドの呼び出し元の値が、引数の値より大きい場合は”1”
- メソッドの呼び出し元の値が、引数の値と同じ場合は”0”
ラッパークラスを使ってcompareToメソッドで値を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
StringUtilsを使って比較する方法
NullPointerExceptionの例外が発生しないように作られた、StringUtilsクラスというものがあります。
StringUtilsクラスは「Apache Commons Lang」のライブラリに含まれているため、使用するにはライブラリをダウンロードしてプロジェクトに追加する必要があります。
StringUtilsクラスのcompareメソッドを使えば、文字列がNullの場合でも安全に比較をすることができます。
StringUtilsを使ってcompareメソッドで文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
Comparatorで比較条件を指定してソート
Comparatorとは
Comparatorとはソートの条件を自分で指定したいときに使います。
Comparatorを使うことで、ソートを昇順から降順に変更したり、自分で定義したクラスオブジェクトの特定の値を元にソートすることができます。
Comparatorで配列とListのソートをする方法
Comparatorで配列のソートをする条件を自分で指定することができます。
Comparatorで配列のソートをする方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
ComparatorでMapのソートをする方法
ComparatorでMapのソートをする条件を自分で指定することができます。
ComparatorでMapのソートをする方法についてはこちらで詳しく解説しているので、ぜひ確認してください!
まとめ
いかがでしたか?
今回はcompareToメソッドの使い方について解説しました。
compareToメソッドを使うと文字列や日付などの比較ができるので、ぜひ覚えてくださいね。
もし、compareToメソッドを使う方法を忘れてしまったらこの記事を確認してください!