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