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 HashSet()を使う
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 + “が重複しています。”);
}
}
結果
1が重複しています。
1が重複しています。
6が重複しています。
上記より少しレベルアップした書き方です。
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) + “つめが重複しています。”);
}
}
}
}
結果
1つめと4つめが重複しています。
重複エラーを表示することも多くありそうなので、重宝しそうです。もし”Tanaka”が増えても重複を洗い出してくれるので便利です。