配列の重複を確認する方法!Java超初心者の勉強

2020-07-14

Javaで配列の中に重複がないかを確認する方法を書き残します。

Listの重複確認方法は以下にまとめています。

配列の中に重複があるか確認

サンプルコード1

int num [] = {1, 2, 3, 4, 5, 6, 2};
int duplicate = 0;
for (int i = 0; i < num.length; i++) {
    for (int k = 0; k < num.length; k++) {
        if (k != i && num[k] == num[i]) {
            duplicate++;
        }
    }
}
if(duplicate >= 2) {
    System.out.println("重複しています");
}else{
    System.out.println("重複はありません");
}

変数duplicateに重複があった場合、1を足して重複しているか判定するコードです。1つ重複があると合計2回足されます。

サンプルコード2

int num[] = {1, 2, 3, 4, 5, 6, 1, 7, 8, 9, 1, 6};
Set set = new HashSet(); //重複確認用
for(int duplicateCheck : num) {
    //setに追加してみて、追加できなかった(重複していた)場合
    if(!set.add(duplicateCheck)) {
        System.out.println(duplicateCheck + "が重複しています。");
    }
}

上記より少しレベルアップした書き方です。
HashSet()は重複を許さない要素の集合を扱うため、追加できなかった = 重複している ということになります。また重複を取り除きたい時場合はHashSet()を使用すればすぐに取り除く事ができます。

以下の警告がバージョン(JDK1.5以降)によっては発生します。

Set は raw 型です。総称型 Set への参照は、パラメーター化する必要があります

その場合は、「Set<Integer> set = new HashSet<Integer>(); 」などのように型を指定して変数setを初期化すると消えます。

重複箇所を表示する方法

ついでにどことどこが重複したのかを表示する場合の書き方です。3つ以上重複がある場合は重複場所がわかると便利です。Stringの場合で書いています。

String str[] = {"Tanaka","Kato","Tokiwa","Tanaka"};
for (int i = 0; i < str.length; i++) {
    String nameA = str[i];
        for (int j = i + 1; j < str.length; j++) {        
           if (!(nameA.equals(""))) {
                    String nameB = str[j];
                    if (nameA.equals(nameB)) {
                        System.out.println((i + 1) + "つめと" + (j + 1) + "つめが重複しています。");
            }
        }
    }
}

重複エラーを表示することも多くありそうなので、重宝しそうです。

Java

Posted by Nakamoto