[Java] Compare関数を使う方法


Devlopment note / Java    作成日付 : 2020/02/29 03:00:00   修正日付 : 2020/02/29 03:00:00

こんにちは。明月です。


この投稿はJavaでcompare関数を使う方法に関する説明です。

Javaで値を比較する関数で「equals」関数があります。このequals関数はObjectタイプにあり、全てのデータタイプで使うことができる関数です。

でもequals関数はただデータ値が同じか同じじゃないかと判断だけできるし、比較データがどっちがもっと大きいかは知ることができません。

もちろんif関数で「if (a > b) else if (a < b) else」でチェックしてもいいですが、少し品格があるように実装することはcompare関数を利用することがあります。

public class CompareExample {
  public static void main(String... args) {
    // a = 1, b = 2で、aがbより小さいなら「-1」
    System.out.println(Integer.compare(1, 2));
    // a = 2, b = 2で、aとbが同じなら「0」
    System.out.println(Integer.compare(2, 2));
    // a = 3, b = 2で aがbより大きいなら「1」
    System.out.println(Integer.compare(3, 2));
  }
}


Integerタイプでcompare関数のパラメータ基準で初めのパラメータをa、2つ目のパラメータをbと考えましょう。

aがbより小さいなら「-1」、同じなら「0」、大きいなら「1」の結果が出ます。つまり<=>順で-1,0,1の結果です。


IntegerではなくDateタイプで比較しましょう。

import java.util.Calendar;
import java.util.Date;

public class CompareExample {
  public static void main(String... args) {
    Date date = getDate(2020, 3, 1);
    // a = 2020/3/1, b = 2020/3/2でaがbより前日なら「-1」
    System.out.println(date.compareTo(getDate(2020, 3, 2)));
    // a = 2020/3/1, b = 2020/3/1でaとbが同日なら「0」
    System.out.println(date.compareTo(getDate(2020, 3, 1)));
    // a = 2020/3/1, b = 2020/2/29でaがbより後日なら「1」
    System.out.println(date.compareTo(getDate(2020, 2, 29)));
  }
  // 年月日を受け取ってDateタイプに変換する関数
  private static Date getDate(int year, int month, int day) {
    // Calendarインスタンスを取得
    Calendar cal = Calendar.getInstance();
    // Calendarデータを初期化
    cal.setTimeInMillis(0);
    // 年月日指定
    cal.set(year, month, day);
    // CalendarインスタンスからDateクラスを返却
    return cal.getTime();
  }
}


Dateタイプもクラスにcompare関数がありますが、今回はインスタンスから比較するcompareTo関数を使用しました。

compareToの場合は、インスタンス変数がa、パラメータデータがbと考えましょう。

aがbより前日なら「-1」、同日なら「0」、後日なら「1」の結果が出ます。つまり<=>順で-1,0,1の結果です。


compare関数は比較対象が比較値に比べてデータが小さいなら「-1」、同じなら「0」、大きいなら「1」の結果が出ます。つまり<=>順で-1,0,1の結果です。

このパターンをよく覚えばソート式や様々なアルゴリズムを組み立てる時、ソースが簡単に実装することができます。


ここまでJavaでCompare関数を使う方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿