0

重複した配列のリストを見つける方法に関する質問の1つを試していました。
このプログラムは動作します:

import java.util.*;

public class CheckDuplicates {
public static void main(String[]args){

    boolean containsDuplicate;
    int[] values = {1,2,3,4,5,6,7,8,9,1,3,4,5,10};

    List<Integer> myObj = new ArrayList<Integer>();
    Set<Integer> dupInt = new HashSet<Integer>();

    for(int id : values){
        System.out.println(myObj);
        if(myObj.contains(id)){    
            System.out.println("From contains "+id);
            containsDuplicate = true;
            dupInt.add(id);
        }else{
            System.out.println("not contains "+id);
            myObj.add(id);
        }
    }

    for(int dup : dupInt)
        System.out.println(dup); // prints the duplicates
}
}

しかし、for ループの部分について概念的な質問があります。もしも

    List<Integer> myObj = new ArrayList<Integer>();

空の配列リストを作成すると、これらの行はどのように機能しますか?

 for(int id : values){ if(myObj.contains(id)){ // Why is this true?

ドキュメントには含まれていると記載されていますが、

boolean contains
(Object o) このリストに指定された要素が含まれている場合に true を返します。より正式には、このリストに (o==null ? e==null : o.equals(e)) となる要素 e が少なくとも 1 つ含まれている場合にのみ true を返します。

定義: インターフェース Collection 内の contains

パラメータ: o - このリスト内の存在をテストする

要素 戻り値: このリストに指定された要素が含まれる場合は true

しかし、私はまだ概念を理解していません!説明してくれてありがとう。

4

1 に答える 1

1

myObj.contains(id) の最初のチェックは常に false になりますが、コードの他の部分を参照してください。

else{
        System.out.println("not contains "+id);
        myObj.add(id);
    }

ループが進行するにつれて、リストにデータが入力されます。さらに反復すると、その条件が満たされる場合があります。

于 2012-11-16T03:02:57.940 に答える