找出一个数组表中不存在的元素

我必须找到一个最好的方法来找出第二个数组表中没有出现的元素。 假设

Arraylist a,b,


Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};

所以基本上我想要的是找出 中的元素 数组列表 b中没有的元素。

那么最好的解决方案是什么呢?

96767 次浏览

你可以试试 removeAll:

List<Integer> notPresent = new ArrayList<Integer>(a);
notPresent.removeAll(b);

请试试这样

for (Object o : a) {
if (!b.contains(o)) {
// this is not present
}
}

循环一个列表,然后使用 包含检查其他列表中的每个元素。

List<Integer> c = new ArrayList<>(a);
c.removeAll(b);

还可以考虑使用 Set 而不是 List。

就像这样。如果你认为可能有重复的 a你可以尝试其他类型的 Collection,如 SetnotPresent

   List<Integer> notPresent = new ArrayList<Integer>();


for (Integer n : a){
if (!b.contains(n)){
notPresent.add(n);
}
}

试试这个..。

使用 List 的 contains()方法。

ArrayList<Integer> aList = new ArrayList<Integer>();


for (Integer i : a){


if (!(b.contains(i))){


aList.add(i);


}


else{
continue;


}


}

试试这个:

 public static void main(String[] args) {
List<Integer> a = new ArrayList<Integer>();
List<Integer> b = new ArrayList<Integer>();
List<Integer> exclusion = new ArrayList<Integer>();


a.add(1);
a.add(2);
a.add(3);
a.add(4);


b.add(1);
b.add(2);
b.add(3);
b.add(5);


for (Integer x : a) {
if (!b.contains(x)) {
exclusion.add(x);
}
}


for (Integer x : exclusion) {
System.out.println(x);
}


}

您可以使用 Apache Commons 集合,它有一个明确用于此目的的方法:

public static void main(String[] args) {
List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
List<Integer> b = Arrays.asList(new Integer[] { 2, 3, 4 });
Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
System.out.println(aMinusB);
}

打印的结果是: [1,5]

ApacheCommons 库经过了良好的测试,通常用于扩展标准 Java 功能。这个特定的方法接受 Iterable作为参数,因此您可以使用任何您想要的 Collection。您还可以混合不同的集合类型:

public static void main(String[] args) {
List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
System.out.println(aMinusB);
}

打印的结果是相同的,[1,5]

看看 Javadoc 给你


为了完整起见,Google 的 番石榴没有这个特征:

Collection *subtract*(Collection, Collection)
没有等效项——创建一个包含 a 的 ArrayList,然后对 b 中的每个元素调用 move。

但是,它实现了一个名为 Sets.difference()方法的方法,如果您更喜欢 Guava 并且使用 set,则可以使用该方法:

public static void main(String[] args) {
Set<Integer> a = new HashSet<Integer>(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 }));
Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
Set<Integer> aMinusB = Sets.difference(a, b);
System.out.println(aMinusB);
}

结果是 a中所有在 b中不存在的元素(也就是 [1,5])。当然,顺序是不确定的,因为它对集合进行操作。

使用 org.apache.commons.collections4.ListUtils

给定

List<Integer> a = Arrays.asList(new Integer[]{  1,2,3,4,5});
List<Integer> b = Arrays.asList(new Integer[]{0,1,2,3});

开拍

List<Integer> c = ListUtils.removeAll(b, a)

结果列表 c

4, 5

这是另一种使用 java 8-的方法

a.stream().filter(b::contains).collect(Collectors.toList());