compare 2 ArrayList java



我有以下数组列表

cd1 = [3,5,7,10,15,16]
cd2 = [4,10,5,8]

输出
[3,7,15,16]

你可以看到一个有6个位置,另一个有4个。

如果它们是重复的,它们应该存储在另一个数组列表

中代码I进位:

import java.util.ArrayList;
public class inexistentes {

public static ArrayList<Integer> inexistentes(ArrayList<Integer> cd1, ArrayList<Integer> cd2){
ArrayList<Integer> newList = new ArrayList<>();

for(int i = 0; i < cd1.size(); i++){

if(cd1.contains(i) ){
newList.add(i);
}

}

return newList;
}
}

我怎样才能买到那些链条…

我已经有了for,但是我不知道如何实现if。

您不需要应用复杂的逻辑。使用List#removeAll函数可以很容易地满足您的要求。

import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> cd1 = List.of(3, 5, 7, 10, 15, 16);
List<Integer> cd2 = List.of(4, 10, 5, 8);
List<Integer> result = new ArrayList<Integer>(cd1);
result.removeAll(cd2);
System.out.println(result);
}
}

输出:

[3, 7, 15, 16]

然而,如果你仍然想按照你的方式去做,就按下面的方法去做:

import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> cd1 = List.of(3, 5, 7, 10, 15, 16);
List<Integer> cd2 = List.of(4, 10, 5, 8);
System.out.println(inexistentes(cd1, cd2));
}
public static ArrayList<Integer> inexistentes(List<Integer> cd1, List<Integer> cd2) {
ArrayList<Integer> newList = new ArrayList<>();
for (int i = 0; i < cd1.size(); i++) {
int n = cd1.get(i);
if (!cd2.contains(n)) {
newList.add(n);
}
}
return newList;
}
}

请尝试这个循环

for (int i : cd1) {
if (!cd2.contains(i)) {
newList.add(i);
}

返回[3,7,15,16]

—edit—

进口java.util.ArrayList;

进口java.util.Arrays;

公共类inexistentes {

public static ArrayList<Integer> inexistentes(ArrayList<Integer> cd1, ArrayList<Integer> cd2) {
ArrayList<Integer> newList = new ArrayList<>();
for (int i : cd1) {
if (!cd2.contains(i)) {
newList.add(i);
}
}
return newList;
}
public static void main(String[] args) {
ArrayList cd1 = new ArrayList(Arrays.asList(3, 5, 7, 10, 15, 16));
ArrayList cd2 = new ArrayList(Arrays.asList(4, 10, 5, 8));
// [3,7,15,16]
ArrayList cd3 = inexistentes(cd1, cd2);
System.out.println(cd3.toString());
}

如果您可以使用Set,则可以将cd2转换为集合,并将Set与cd1进行比较。与使用contains() from list相比,这将更快。同时Set比List占用更多的内存。

private static ArrayList<Integer> inexistentes(List<Integer> cd1, List<Integer> cd2) {
ArrayList<Integer> newList = new ArrayList<>();
Set<Integer> cd2Set = new HashSet<Integer>(cd2);
for (int set1 : cd1) {
if (!cd2Set.contains(set1)) {
newList.add(set1);
}
}
return newList;
}

最新更新