Java8 までは、単純に equal を調べるなら、java.util.Arrays の equals や、deepEquals(Object a1, Object a2) で
事足りた。
Java9 から、Arrays には以下の static メソッドが追加されている。
int Arrays.compare(T a, T b)
int Arrays.compare(int a, int b)
int Arrays.compare(byte a, byte b)
int Arrays.compareUnsigned(int a, int b)
int Arrays.compareUnsigned(byte a, byte b)
int Arrays.mismatch(Object a, Object b)
int Arrays.mismatch(int a, int b)
int Arrays.mismatch(byte a, byte b)
char, double, float, long, short も同様。
compare 辞書順比較、int なら、Integer.compare(int, int) で配列の要素を比較した結果を返してくれる。
詳細は、APIドキュメントを参照
例
int[] a = Arrays.asList(1, 2, 3, 4).stream().mapToInt(i->i).toArray(); int[] b = Arrays.asList(1, 2, 3, 4).stream().mapToInt(i->i).toArray(); System.out.println("Arrays.compare(a, b) = " + Arrays.compare(a, b)); System.out.println("Arrays.compareUnsigned(a, b) = " + Arrays.compareUnsigned(a, b)); System.out.println("Arrays.mismatch(a, b) = " + Arrays.mismatch(a, b));
の結果は、
Arrays.compare(a, b) = 0 Arrays.compareUnsigned(a, b) = 0 Arrays.mismatch(a, b) = -1
compare と compareUnsigned の差は注意が必要
int[] a = Arrays.asList(1, 2, 3, 4).stream().mapToInt(i->i).toArray(); int[] b = Arrays.asList(1, 2, -3, 4).stream().mapToInt(i->i).toArray(); System.out.println("Arrays.compare(a, b) = " + Arrays.compare(a, b)); System.out.println("Arrays.compareUnsigned(a, b) = " + Arrays.compareUnsigned(a, b)); System.out.println("Arrays.mismatch(a, b) = " + Arrays.mismatch(a, b));
の結果は、
Arrays.compare(a, b) = 1 Arrays.compareUnsigned(a, b) = -1 Arrays.mismatch(a, b) = 2
配列要素、インデックスを注意したロジック設計では活躍しそうと思います。