我正在尝试一个关于如何查找重复数组列表的问题。
该计划有效:
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
,则返回true
(Object o)如果此列表包含,则返回true 指定的元素。更正式地说,当且仅当这样时,返回true list包含至少一个元素e,使得(o == null?e == null: o.equals(E))。
指定:包含在界面集合中
参数:o - 要测试该列表中存在的元素
返回:如果此列表包含指定的元素
但我仍然不明白这个概念!在此先感谢您的解释。
答案 0 :(得分:1)
你是对的,myObj.contains(id)的第一次检查将始终为false,但请参阅代码的其他部分:
else{
System.out.println("not contains "+id);
myObj.add(id);
}
随着循环的进行,您的列表将被填充 - 并且进一步的迭代可能满足该条件。