list 求交集和差集 JAVA
时间: 2025-03-31 10:04:54 浏览: 28
### Java 中计算两个 List 的交集与差集
在 Java 中,可以通过 `Set` 接口及其子类来高效地完成列表的交集、并集和差集运算。以下是具体的实现方式:
#### 计算交集
为了计算两个 `List` 的交集,可以先将其转换为 `HashSet`,然后利用 `retainAll()` 方法保留两者共有的元素。
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class IntersectionExample {
public static Set<String> getIntersection(List<String> list1, List<String> list2) {
Set<String> set1 = new HashSet<>(list1);
Set<String> intersection = new HashSet<>(set1); // 创建副本以保护原始数据
intersection.retainAll(new HashSet<>(list2));
return intersection;
}
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");
System.out.println(getIntersection(list1, list2)); // 输出 [B, C]
}
}
```
此代码片段展示了如何通过 `retainAll()` 来获得两个列表的交集[^3]。
---
#### 计算差集
要计算两个 `List` 的差集(即第一个列表中有而第二个列表中没有的元素),同样可以借助 `removeAll()` 方法。
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DifferenceExample {
public static Set<String> getDifference(List<String> list1, List<String> list2) {
Set<String> difference = new HashSet<>(list1);
difference.removeAll(new HashSet<>(list2));
return difference;
}
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");
System.out.println(getDifference(list1, list2)); // 输出 [A]
}
}
```
这段代码实现了从第一个列表中移除所有存在于第二个列表中的元素的操作。
---
需要注意的是,在执行上述操作之前,应确保所使用的对象已经正确重写了 `equals()` 和 `hashCode()` 方法,因为这些方法决定了集合内部元素的唯一性和比较逻辑。
---
### 总结
- **交集** 使用 `retainAll()` 实现。
- **差集** 使用 `removeAll()` 实现。
- 需要注意对象的 `equals()` 和 `hashCode()` 方法是否被适当地覆盖,以便集合能够正常工作。
---
阅读全文
相关推荐
















