Java 2个集合如何遍历比较

在Java编程中,经常会遇到需要比较两个集合的情况。比较两个集合可以用于查找差异、寻找相同元素、合并集合等操作。本文将介绍一种解决这个问题的方案,并提供相应的代码示例。

问题描述

假设有两个集合A和B,每个集合中都存储了一些元素。我们想要比较这两个集合,找出它们的差异和相同的元素。

集合A示例:[1, 2, 3, 4, 5]

集合B示例:[3, 4, 5, 6, 7]

我们需要找出集合A中存在但集合B中不存在的元素,以及集合B中存在但集合A中不存在的元素。

方案介绍

步骤1:遍历集合A并添加到HashMap中

首先,我们需要遍历集合A,并将每个元素添加到一个HashMap中。使用HashMap的目的是为了方便快速地查找和比较元素。

Map<Integer, Integer> mapA = new HashMap<>();
for (int num : A) {
    mapA.put(num, mapA.getOrDefault(num, 0) + 1);
}

步骤2:遍历集合B并比较HashMap中的元素

接下来,我们需要遍历集合B,并在HashMap中查找每个元素。如果HashMap中存在该元素,说明集合A和集合B中都存在这个元素;如果HashMap中不存在该元素,说明集合A中存在但集合B中不存在这个元素。

List<Integer> commonElements = new ArrayList<>(); // 用于存储相同元素
List<Integer> differentElementsA = new ArrayList<>(); // 用于存储集合A中独有的元素
List<Integer> differentElementsB = new ArrayList<>(); // 用于存储集合B中独有的元素

for (int num : B) {
    if (mapA.containsKey(num)) {
        commonElements.add(num);
        int count = mapA.get(num);
        if (count > 1) {
            mapA.put(num, count - 1);
        } else {
            mapA.remove(num);
        }
    } else {
        differentElementsB.add(num);
    }
}

// 将集合A中剩余的元素添加到differentElementsA中
for (int num : mapA.keySet()) {
    int count = mapA.get(num);
    while (count > 0) {
        differentElementsA.add(num);
        count--;
    }
}

步骤3:输出结果

最后,我们可以通过打印输出或其他方式将结果展示出来。

System.out.println("相同的元素:" + commonElements);
System.out.println("集合A中的独有元素:" + differentElementsA);
System.out.println("集合B中的独有元素:" + differentElementsB);

完整代码示例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CollectionComparison {
    public static void main(String[] args) {
        List<Integer> A = List.of(1, 2, 3, 4, 5);
        List<Integer> B = List.of(3, 4, 5, 6, 7);

        Map<Integer, Integer> mapA = new HashMap<>();
        for (int num : A) {
            mapA.put(num, mapA.getOrDefault(num, 0) + 1);
        }

        List<Integer> commonElements = new ArrayList<>();
        List<Integer> differentElementsA = new ArrayList<>();
        List<Integer> differentElementsB = new ArrayList<>();

        for (int num : B) {
            if (mapA.containsKey(num)) {
                commonElements.add(num);
                int count = mapA.get(num);
                if (count > 1) {
                    mapA.put(num, count - 1);
                } else {
                    mapA.remove(num);
                }
            } else {
                differentElementsB.add(num);
            }
        }

        for (int num : mapA.keySet()) {
            int count = mapA.get(num);
            while (count > 0) {
                differentElementsA.add(num);
                count--;
            }
        }

        System.out.println("相同的元素:" + commonElements);
        System.out.println("集合A中的独有元素:" + differentElementsA);
        System.out.println