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