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
一応全ての要素を検索できるようになっていますが、元の配列の要素を変更しているため、出力後の配列num1
とnum2
の中身は最初と異なってしまいます。
よって、Arrays.copyOfメソッド
を使って配列の要素をnum3
とnum4
にコピーしています。
まとめ
今回やったことのまとめになります。
ポイント
mismatchメソッド
で配列の間違っている最初の箇所を得ることができる- 配列が違う場合は最初の違う箇所の添え字が、一致した場合は
‐1
が返る - 戻り値は
int型
で返る
mismatchメソッド
の使い方でした。以上で記事を終わりにします。