JavaのArraysクラス
のmismatchメソッド
で2つの配列の違いを探す方法を紹介します。
mismatchメソッド
は以下の様に記述します。
1Arrays.mismatch(Array a, Array b);
配列aと配列bを比較して、最初に一致しなかった要素の添え字を戻します。一致した場合は‐1
を返します。また、配列の添え字はint型
なので、返り値の型もint型
になります。
また、mismatchメソッド
はequalsメソッド
とは違い、違っている最初の箇所を戻してくれます。
引数がNULL
の時はNullPointerException
の例外が発生します。
使用例をサンプルコードによって紹介します。
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文を使って全ての文字を検索する方法を作ってみます。以下にサンプルコードを示します。
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メソッド
の使い方を紹介しました。以上で記事を終わりにします。