Java如何获取两个list相同的数据

在Java中,我们经常会需要比较两个List中的数据,找出它们相同的部分。这样的需求可能在数据处理、算法实现等场景下经常出现。下面将介绍几种方法来实现这一目标。

方法一:使用循环遍历

最简单的方法是使用循环遍历两个List,逐个比较它们的元素是否相同。这种方法的时间复杂度为O(n^2),不适用于大型List。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

List<Integer> commonElements = new ArrayList<>();
for(Integer element : list1) {
    if(list2.contains(element)) {
        commonElements.add(element);
    }
}

System.out.println("Common elements: " + commonElements);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

方法二:使用Set

使用Set可以减少时间复杂度,将List中的元素存储到Set中,然后比较两个Set的交集。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

Set<Integer> set1 = new HashSet<>(list1);
Set<Integer> set2 = new HashSet<>(list2);

set1.retainAll(set2);

List<Integer> commonElements = new ArrayList<>(set1);

System.out.println("Common elements: " + commonElements);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

方法三:使用Java 8 Stream API

Java 8引入了Stream API,可以用来处理集合数据。我们可以使用Stream的filter方法来筛选出两个List中相同的元素。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

List<Integer> commonElements = list1.stream()
        .filter(list2::contains)
        .collect(Collectors.toList());

System.out.println("Common elements: " + commonElements);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

方法四:使用Apache Commons CollectionUtils

Apache Commons是一个开源项目,提供了许多实用的工具类。其中的CollectionUtils类提供了一些有用的方法,可以方便地处理集合数据。

List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

List<Integer> commonElements = (List<Integer>) CollectionUtils.intersection(list1, list2);

System.out.println("Common elements: " + commonElements);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

以上就是几种在Java中获取两个List相同数据的方法。根据具体的场景和需求,可以选择不同的方法来实现。在实际应用中,要考虑数据量的大小、性能要求等因素来选择合适的方法。

旅行图

journey
    title Java获取两个List相同数据之旅
    section 方法一
        开始 --> 循环遍历 --> 比较元素 --> 结束
    section 方法二
        开始 --> 转为Set --> 比较交集 --> 结束
    section 方法三
        开始 --> 使用Stream API --> 筛选元素 --> 结束
    section 方法四
        开始 --> 使用Apache Commons --> 获取交集 --> 结束

甘特图

Java获取两个List相同数据甘特图 2022-01-01 2022-01-03 2022-01-05 2022-01-07 2022-01-09 2022-01-11 2022-01-13 2022-01-15 2022-01-17 2022-01-19 2022-01-21 2022-01-23 2022-01-25 2022-01-27 2022-01-29 循环遍历 转为Set 使用Stream API 使用Apache Commons 方法一 方法二 方法三 方法四 Java获取两个List相同数据甘特图

通过以上方法,我们可以方便地获取两个List中相同的数据,提高了数据处理的效率和准确性。在实际开发中,根据具体需求选择合适的方法来处理数据,