Java使用数组查找重复项(包含概念)

时间:2012-11-16 03:00:17

标签: java list for-loop contains

我正在尝试一个关于如何查找重复数组列表的问题。
该计划有效:

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   指定的元素。更正式地说,当且仅当这样时,返回true   list包含至少一个元素e,使得(o == null?e == null:   o.equals(E))。

指定:包含在界面集合中

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

  返回:如果此列表包含指定的元素

,则返回true

但我仍然不明白这个概念!在此先感谢您的解释。

1 个答案:

答案 0 :(得分:1)

你是对的,myObj.contains(id)的第一次检查将始终为false,但请参阅代码的其他部分:

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

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