こんにちは。明月です。
この投稿は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関数を使う方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [Java] Jsonタイプのデータを使う方法(Gsonライブラリ)2020/03/11 00:30:15
- [Java] Base64をエンコード、デコードする方法2020/03/09 10:24:01
- [Java] cmdコマンドを実行するための方法2020/03/06 18:01:10
- [Java] メール(javax.mail)を発送する方法2020/03/05 20:07:49
- [Java] クラス複製(Clonable, Reflection)2020/03/05 00:03:19
- [Java] シリアライズ(直列化: Serializable)2020/03/03 00:03:33
- [Java] StringBuilderとStringBufferの差異2020/03/02 07:52:22
- [Java] Compare関数を使う方法2020/02/29 03:00:00
- [Java] 数字フォーマット(お金表示及び小数点以下表示)2020/02/28 03:00:00
- [Java] サーブレット環境で現在の実行ディレクトリを取得する方法2020/02/27 03:00:00
- [Java] 日本語をユニコードに変換して、ユニコードから日本語に変換する方法2020/02/26 03:00:00
- [Java] コンソールからデータを受け取る方法(System.in)2020/02/25 03:00:00
- [Java] Servlet環境でWebSocket通信中、HttpSessionを取得する方法2020/02/24 07:47:20
- [Java] WebSocketでWeb Sessionを使う方法(Broadcast)とウェブチャットの例2020/02/22 03:00:00
- [Java] WebSocket (ウェブソケット)2020/02/21 03:00:00
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07