Java 两个List比对
在Java编程中,我们经常需要比对两个List的差异。这个过程可以帮助我们找出两个List中相同的元素,或者找出在一个List中存在而在另一个List中不存在的元素。比对两个List的不同方法有很多,本文将介绍其中的一些常用方法,并给出相应的代码示例。
方法一:使用循环和contains方法
最简单的方式是使用循环遍历一个List,然后使用contains方法判断另一个List中是否包含相同的元素。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class ListComparisonExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
List<String> list2 = new ArrayList<>();
list2.add("B");
list2.add("C");
list2.add("D");
List<String> commonElements = new ArrayList<>();
List<String> uniqueElements = new ArrayList<>();
for (String element : list1) {
if (list2.contains(element)) {
commonElements.add(element);
} else {
uniqueElements.add(element);
}
}
System.out.println("Common elements: " + commonElements);
System.out.println("Unique elements in list1: " + uniqueElements);
for (String element : list2) {
if (!list1.contains(element)) {
uniqueElements.add(element);
}
}
System.out.println("Unique elements in list2: " + uniqueElements);
}
}
在上述代码中,我们使用循环遍历了list1中的每个元素,并使用contains方法判断list2中是否包含相同的元素。如果包含,则将该元素添加到commonElements列表中;如果不包含,则将该元素添加到uniqueElements列表中。同样,我们也遍历list2,将list1中不存在的元素添加到uniqueElements列表中。最后,我们分别打印出commonElements和uniqueElements。
方法二:使用retainAll和removeAll方法
另一种常用的方法是使用Java的retainAll和removeAll方法。retainAll方法可以用来获取两个List中的共同元素,而removeAll方法可以用来删除一个List中与另一个List中共有的元素。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class ListComparisonExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
List<String> list2 = new ArrayList<>();
list2.add("B");
list2.add("C");
list2.add("D");
List<String> commonElements = new ArrayList<>(list1);
commonElements.retainAll(list2);
List<String> uniqueElements = new ArrayList<>(list1);
uniqueElements.removeAll(list2);
System.out.println("Common elements: " + commonElements);
System.out.println("Unique elements in list1: " + uniqueElements);
uniqueElements.addAll(list2);
uniqueElements.removeAll(list1);
System.out.println("Unique elements in list2: " + uniqueElements);
}
}
在上述代码中,我们首先创建了两个新的列表commonElements和uniqueElements,并将list1添加到commonElements和uniqueElements中。然后,我们使用retainAll方法从commonElements中删除list2中没有的元素,这样就得到了两个列表中的共同元素。接着,我们使用removeAll方法从uniqueElements中删除与list2中共有的元素,这样就得到了list1中与list2中不同的元素。最后,我们将list2中的元素添加到uniqueElements中,并使用removeAll方法删除与list1中共有的元素,这样就得到了list2中与list1中不同的元素。
方法三:使用Java 8的Stream API
Java 8引入的Stream API提供了更加简洁和优雅的方式来比对两个List。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ListComparisonExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
List<String> list2 = new ArrayList<>();
list2.add("B");
list2.add("C");
list2.add("D");
List<String> common