Array.compare()とは Java初心者の勉強!

Java 9 からと登場したArrays.compare()について書いていきます。

Arrays.compare()とは

2つの配列をインデックス順に比較します。比較した結果はint型を戻しどちらが大きい値を持っているか判断できます。

構文

Arrays.compare(array1, array2)

インデックスについて聞き馴染みのない方は以下を参考西ていただければと思います。

サンプルコード

サンプルコードで動きを確認します。

int型配列の比較

一番わかりやすいint型を例に比較してみます。

int array1[] = {1,2,3};
int array2[] = {1,2,3};
int array3[] = {3,2,1};
int array4[] = {0,2,3};
int array5[] = {1,3,1};
int array6[] = {0,5,6};
int array7[] = {1,2};
int array8[] = {1,2,3,4};
int array9[] = {3,2};
int array10[] = {1,2,0,4};
int array11[] = {1,2,3,4,5,6,7};
System.out.println(Arrays.compare(array1, array2)); // 0 同値
System.out.println(Arrays.compare(array1, array3)); // -1 array3の方が大きい
System.out.println(Arrays.compare(array1, array4)); // 1 array1の方が大きい
System.out.println(Arrays.compare(array1, array5)); // -1 array5の方が大きい
System.out.println(Arrays.compare(array1, array6)); // 1 array1の方が大きい
System.out.println(Arrays.compare(array1, array7)); // 1 array1の方が大きい
System.out.println(Arrays.compare(array1, array8)); // -1 array8の方が大きい
System.out.println(Arrays.compare(array1, array9)); // -1 array9の方が大きい
System.out.println(Arrays.compare(array1, array10)); // 1 array1の方が大きい
System.out.println(Arrays.compare(array1, array11)); // -4 array11の方が4つ長い

比較対象が同値であれば「0」が戻されます。
比較対象はインデックスごとに1つずつ比較していきます。1番目の引数の方がおおきければ「1」、小さければ「-1」が返ってきます。
配列の中身の合算ではないので注意しましょう。
配列の長さが異なる場合もインデックスごとに比較していきます。インデックス分が同値であれば「array1-array2」が戻ってきます。
また配列の長さが異なってもインデックス順に比較して大きさの判定がされればそちらが優先されて値が返ってきます。

boolean型配列の比較

boolean型でも比較してみます。

boolean boo1[] = {false, true};
boolean boo2[] = {true, false};
boolean boo3[] = {false, false};
System.out.println(Arrays.compare(boo1, boo2)); // -1 boo2が大きい
System.out.println(Arrays.compare(boo1, boo3)); // 1 boo1が大きい

boolean型は「true」が大きいと判断されます。

指定した範囲で比較

長さが異なる配列など指定した範囲で比較したいときは以下の構文を使用します。

構文

Arrays.compare(array1, array1-start, array1-end, array2, array2-start, array2-end)

範囲指定の実験

正直なぜ配列のインデックス外が許容されているのかがよくわかりません。

int array1[] = {1,2,3,4,5,6,7};
int array2[] = {1,2,3};
System.out.println(Arrays.compare(array1, 1, 3, array2, 1, 3)); // 0 同値
System.out.println(Arrays.compare(array1, 0, 1, array2, 1, 2)); // -1 array2の方が大きい
System.out.println(Arrays.compare(array1, 0, 3, array2, 0, 3));
// 0 なぜか3(array2のインデックス外)は許容されている
System.out.println(Arrays.compare(array1, 2, 2, array2, 1, 1));
// 0 1つの比較は0
System.out.println(Arrays.compare(array1, 2, 1, array2, 1, 2));
// 実行時エラー IllegalArgumentException:
System.out.println(Arrays.compare(array1, 1,1, array2, 1, 4)); //ArrayIndexOutOfBoundsException

おわり

正直きちんと理解できませんでした。新情報があれば更新したいと思います。
どなたか詳しい方がいたらなぜインデックスの範囲外の数値を指定できるのか教えていただきたいです。

参考

https://docs.oracle.com/javase/jp/9/docs/api/java/util/Arrays.html

Java

Posted by Nakamoto