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

【Java】mismatchメソッドで2つの配列の違いを探す方法プログラミングの知識
プログラミングの知識

2つの配列の違いを探す時には、Arraysクラスmismatchメソッドを使うことができます。今回はmismatchメソッドの使い方を解説します。

このメソッドはJavasilver SE11の黒本でも出題されているメソッドになります。

スポンサーリンク

mismatchメソッドの書式

mismatchメソッドは以下の様に記述します。

//mismatchメソッドの書式例
Arrays.mismatch(配列1,配列2);

配列1と配列2を比較して、最初に一致しなかった要素の添え字を戻します。一致した場合は‐1を返します。また、配列の添え字はint型なので、返り値の型もint型になります。

また、mismatchメソッドequalsメソッドとは違い、違っている最初の箇所を戻してくれます。

メソッドの使用例【サンプルコード・出力結果】

使用例をサンプルコードによって紹介します。まず、サンプルコードを以下に示します。

package bg;

import java.util.Arrays;

public class MismatchTest {

    public static void main(String[] args) {

        int[] num1 = { 1, 2, 3, 4, 5, 6 };
        int[] num2 = { 1, 2, 3, 5, 4, 6 };
        int[] num3 = { 1, 2, 3, 4, 5, 6 };

        // num1,num2を比較する。添え字3の要素が違うので3が返される
        System.out.println(Arrays.mismatch(num1, num2));

        // num1,num2を比較する。一致しているので-1が返される
        System.out.println(Arrays.mismatch(num1, num3));
    }
}

サンプルコードの出力結果を以下に示します。

3   //{ 1, 2, 3, 4, 5, 6 }と{ 1, 2, 3, 5, 4, 6 }の比較
-1 //同じ配列の比較

配列の全ての要素を検索する

このメソッドを普通に使うと最初に出てきた文字の位置しか返ってきません。そこでfor文を使って全ての文字を検索する方法を作ってみます。以下にサンプルコードを示します。

package bg;

import java.util.Arrays;

public class MismatchTest2 {

    public static void main(String[] args) {
        int[] num1 = { 1, 2, 3, 4, 5, 6 };
        int[] num2 = { 1, 2, 3, 5, 4, 6 };
        int[] num3 = Arrays.copyOf(num1, num1.length);
        int[] num4 = Arrays.copyOf(num2, num2.length);
        int index, sum = 0;
        System.out.println(Arrays.toString(num3));
        System.out.println(Arrays.toString(num4));

        for (int i = 0; i < num1.length; i++) {
            index = Arrays.mismatch(num1, num2);
            if (index != -1) {
                System.out.println(sum + 1 + "個目:" + (index + 1));
                i = index;
                sum++;
                num1[i] = 0;
                num2[i] = 0;
            }
        }
        System.out.println("該当個数:" + sum);
    }
}

サンプルコードの出力結果を以下に示します。

[1, 2, 3, 4, 5, 6] //元の配列1
[1, 2, 3, 5, 4, 6] //元の配列2
1個目:4
2個目:5
該当個数:2

一応全ての要素を検索できるようになっていますが、元の配列の要素を変更しているため、出力後の配列num1num2の中身は最初と異なってしまいます。

よって、Arrays.copyOfメソッドを使って配列の要素をnum3num4にコピーしています。

まとめ

今回やったことのまとめになります。

ポイント
  • mismatchメソッドで配列の間違っている最初の箇所を得ることができる
  • 配列が違う場合は最初の違う箇所の添え字が、一致した場合は‐1が返る
  • 戻り値はint型で返る

mismatchメソッドの使い方でした。以上で記事を終わりにします。

参考文献

スポンサーリンク
Dim雑記
タイトルとURLをコピーしました