0

我正在尝试有关如何查找重复数组列表的问题之一。
该程序有效:

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>();

创建一个空的arraylist,那么这些行是如何工作的?

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

虽然文档说包含

boolean contains
(Object o) 如果此列表包含指定元素,则返回 true。更正式地说,当且仅当此列表包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时,才返回 true。

指定者:接口 Collection 中的 contains

参数:o - 要测试其在此列表中的存在的元素

返回:如果此列表包含指定元素,则为 true

但我还是不明白这个概念!提前感谢您的解释。

4

1 回答 1

1

你是对的,第一次检查 myObj.contains(id) 总是错误的,但请看你代码的另一部分:

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

随着循环的进行,您的列表将被填充 - 进一步的迭代可能会满足该条件。

于 2012-11-16T03:02:57.940 回答