【Java入門】compareToで大小を比較をする方法総まとめ(文字列/日付)

こんにちは!エンジニアの中沢です。

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”

【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

戻り値の覚え方は「左の値 - 右の値」

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型の文字列を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

【Java入門】String型の大小を比較する方法(compare)
更新日:2023年3月21日

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”

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

【Java入門】Dateクラスで日付の比較(compareTo/before/after)
更新日:2023年3月21日

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の値を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

【Java入門】BigDecimalの大小をcompareToで比較する方法
更新日:2023年3月21日

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メソッドで値を比較する方法についてはこちらで詳しく解説しているので、ぜひ確認してください!

【Java入門】Integerとラッパークラスの基礎の基礎をわかりやすく解説!
更新日:2023年3月21日

【何から学べばいいかわからない…そんな悩みを解決します!】

完全無料ですぐわかる「プログラミング学習プラン診断」

・適性にあわせて学習プランを診断
・完全無料で気軽に診断できる
・学習の悩みもまるっと解決

さっそく診断してみる

StringUtilsを使って比較する方法

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

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

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

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

【Java入門】StringUtilsの使い方総まとめ(Apache Commons Lang)
更新日:2023年3月21日

Comparatorで比較条件を指定してソート

Comparatorとは

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

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

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

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

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

【Java入門】配列やListをソートする方法(文字列もソート)
更新日:2023年3月21日

ComparatorでMapのソートをする方法

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

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

【Java】Map(HashMap・TreeMap)のkey・valueでソートする方法
更新日:2023年3月21日

まとめ

いかがでしたか?

今回はcompareToメソッドの使い方について解説しました。

compareToメソッドを使うと文字列や日付などの比較ができるので、ぜひ覚えてくださいね。

もし、compareToメソッドを使う方法を忘れてしまったらこの記事を確認してください!

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
ntakeshi@sejuku.net

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close