在Java中比较两个ArrayList的循环
我正在尝试编写一个方法,它接受两个双精度数组列表,并返回set1中所有在set2中找不到的值。这些数字应该在set3中返回。通常我只会使用set。包含但我只能使用set。准备好。大小和设置。添加谁能给我指出正确的方向吗
例如:
如果set1有数字1,2,3,4,5
set2的数字是1,7,9,5,3
set3应该只包含2,4,5
ArrayList<Double> setDiff(ArrayList<Double> set1, ArrayList<Double> set2){
ArrayList<Double> set3 = new ArrayList<Double>();
for(int i = 0; i < set1.size(); i++){
for(int x = 0; x < set2.size(); x++){
if(set1.get(i) != set2.get(x)){
set3.add(set1.get(i));
}
}
}
return set3;
}
# 1 楼答案
问题是,您正在根据第一次失败向
set3
添加数字。因此,如果set2
的第一个元素与set1
的当前元素不匹配,则将其添加到set3
考虑到工具箱中的限制,我怀疑这是你的家庭作业。所以,我会给你一个方法的想法
只要在
set2
中找到当前元素,就可以使用boolean
变量并切换它(例如,将其设置为false
),然后从inner loop
中跳出因此,您在内部循环中的状态将从:-
致:
然后在
inner loop
之外,检查boolean
变量的状态。根据状态,您可以将当前项添加或不添加到set3
。例如,如果布尔变量为false
,这意味着您在set2
中找到了元素,所以不要将其添加到set3
,否则请添加它您还需要在每次外部循环开始时重置布尔变量
# 2 楼答案
试试看
印刷品
此外,我建议将方法签名更改为
# 3 楼答案
您可以尝试使用ApacheCommons CollectionUtils.removeAll方法:该方法返回一个集合,其中包含c中不在remove中的所有元素