【Java】mismatchメソッドで2つの配列の違いを探す方法

JavaのArraysクラスのmismatchメソッドで2つの配列の違いを探す方法を紹介します。
mismatchメソッドの書式
mismatchメソッドは以下の様に記述します。
mismatchメソッドの書式例
1Arrays.mismatch(Array a, Array b);配列aと配列bを比較して、最初に一致しなかった要素の添え字を戻します。一致した場合は‐1を返します。また、配列の添え字はint型なので、返り値の型もint型になります。
また、mismatchメソッドはequalsメソッドとは違い、違っている最初の箇所を戻してくれます。
引数がNULLの時はNullPointerExceptionの例外が発生します。
メソッドの使用例
使用例をサンプルコードによって紹介します。
MismatchTest1.java
1import java.util.Arrays;
2
3public class MismatchTest1 {
4
5 public static void main(String[] args) {
6
7 int[] num1 = { 1, 2, 3, 4, 5, 6 };
8 int[] num2 = { 1, 2, 3, 5, 4, 6 };
9 int[] num3 = { 1, 2, 3, 4, 5, 6 };
10
11 // num1,num2を比較する。添え字3の要素が違うので3が返される
12 System.out.println(Arrays.mismatch(num1, num2));
13
14 // num1,num2を比較する。一致しているので-1が返される
15 System.out.println(Arrays.mismatch(num1, num3));
16 }
17}実行結果が以下になります。
出力結果
13 // { 1, 2, 3, 4, 5, 6 }と{ 1, 2, 3, 5, 4, 6 }の比較
2-1 // 同じ配列の比較配列の全ての要素を検索する
このメソッドを普通に使うと最初に出てきた文字の位置しか返ってきません。そこでfor文を使って全ての文字を検索する方法を作ってみます。以下にサンプルコードを示します。
MismatchTest2.java
1import java.util.Arrays;
2
3public class MismatchTest2 {
4
5 public static void main(String[] args) {
6 int[] num1 = { 1, 2, 3, 4, 5, 6 };
7 int[] num2 = { 1, 2, 3, 5, 4, 6 };
8 int[] num3 = Arrays.copyOf(num1, num1.length);
9 int[] num4 = Arrays.copyOf(num2, num2.length);
10 int index, sum = 0;
11 System.out.println(Arrays.toString(num3));
12 System.out.println(Arrays.toString(num4));
13
14 for (int i = 0; i < num1.length; i++) {
15 index = Arrays.mismatch(num1, num2);
16 if (index != -1) {
17 System.out.println(sum + 1 + "個目:" + (index + 1));
18 i = index;
19 sum++;
20 num1[i] = 0;
21 num2[i] = 0;
22 }
23 }
24 System.out.println("該当個数:" + sum);
25 }
26}実行結果が以下になります。
出力結果
1[1, 2, 3, 4, 5, 6] // 元の配列1
2[1, 2, 3, 5, 4, 6] // 元の配列2
31個目:4
42個目:5
5該当個数:2一応全ての要素を検索できるようになっていますが、元の配列の要素を変更しているため、出力後の配列num1とnum2の中身は最初と異なってしまいます。
よって、Arrays.copyOfメソッドを使って配列の要素をnum3とnum4にコピーしています。
今回はmismatchメソッドの使い方を紹介しました。以上で記事を終わりにします。