などの応用的な使い方に関しても解説していきます。

今回はこれらの方法を覚えるために、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));
    

    [実行結果]

    このように、左の値が大きい場合には正の値、右の値の方が大きければ負の値になります。

    戻り値を間違えないために、ぜひこの覚え方を試してみてください!

    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));
    

    [実行結果]

    compareToIgnoreCaseとの違い

    compareToメソッドの戻り値は、引数で指定した文字列が辞書的に後になる場合に負の値を返します。逆に辞書的に前になる場合は正の値を返し、同じ場合は”0”を返します。

    compareToIgnoreCaseメソッドを使えば、文字列の大文字と小文字を区別せずに比較する事ができます。

    String型の文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    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));

    [実行結果]

    compareToメソッドで日付を比較する場合の戻り値は次の通りです。

  • メソッドの呼び出し元の日付が、引数の日付より前の場合は”-1”
  • メソッドの呼び出し元の日付が、引数の日付より後の場合は”1”
  • メソッドの呼び出し元の日付が、引数の日付と同じ場合は”0”
  • 日付を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    System.out.println(zero.compareTo(one)); System.out.println(one.compareTo(zero)); System.out.println(zero.compareTo(zero));

    [実行結果]

    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));
    

    [実行結果]

    ラッパークラスを使ってcompareToメソッドで値を比較する場合の戻り値は次の通りです。

  • メソッドの呼び出し元の値が、引数の値より小さい場合は”-1”
  • メソッドの呼び出し元の値が、引数の値より大きい場合は”1”
  • メソッドの呼び出し元の値が、引数の値と同じ場合は”0”
  • ラッパークラスを使ってcompareToメソッドで値を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    StringUtilsを使って比較する方法

    NullPointerExceptionの例外が発生しないように作られた、StringUtilsクラスというものがあります。

    StringUtilsクラスは「Apache Commons Lang」のライブラリに含まれているため、使用するにはライブラリをダウンロードしてプロジェクトに追加する必要があります。

    StringUtilsクラスのcompareメソッドを使えば、文字列がNullの場合でも安全に比較をすることができます。

    StringUtilsを使ってcompareメソッドで文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    Comparatorとは

    Comparatorとはソートの条件を自分で指定したいときに使います。

    Comparatorを使うことで、ソートを昇順から降順に変更したり、自分で定義したクラスオブジェクトの特定の値を元にソートすることができます。

    Comparatorで配列とListのソートをする方法

    Comparatorで配列のソートをする条件を自分で指定することができます。

    Comparatorで配列のソートをする方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン