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

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

Javaには値や文字列の大小を比較するためのcompareToメソッドがあります。

この記事では、

  • compareToメソッドとは
  • String型の文字列を比較する方法
  • Dateクラスの日付を比較する方法
  • BigDecimalの値を比較する方法


という基本的な内容から、

  • Integerなどのラッパークラスで値を比較する方法
  • Comparatorで配列のソートをする方法
  • ComparatorでListのソートをする方法
  • ComparatorでMapのソートをする方法

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

今回はこれらの方法を覚えるために、compareToメソッドのさまざまな使い方をわかりやすく解説します!

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

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

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)
更新日 : 2019年5月3日

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で比較する方法
更新日 : 2019年4月16日

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とラッパークラスの基礎の基礎をわかりやすく解説!
更新日 : 2018年10月4日

StringUtilsを使って比較する方法

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

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

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

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

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

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

Comparatorとは

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

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

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

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

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

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

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

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

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

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

まとめ

いかがでしたか?

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

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

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

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

中沢 丈

中沢 丈

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

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説