以下使用List
Java 集合框架实现
示例代码:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetOperations {
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> difference = new ArrayList<>(list1);
difference.removeAll(list2);
System.out.println("差集:");
for (String item : difference) {
System.out.println(item);
}
// 求并集
Set<String> union = new HashSet<>(list1);
union.addAll(list2);
System.out.println("\n并集:");
for (String item : union) {
System.out.println(item);
}
// 求交集
List<String> intersection = new ArrayList<>(list1);
intersection.retainAll(list2);
System.out.println("\n交集:");
for (String item : intersection) {
System.out.println(item);
}
}
}
输出结果为:
差集:
A
并集:
A
B
C
D
交集:
B
C
在这个示例代码中,使用了 removeAll()
方法来求两个集合的差集,使用了 addAll()
方法来求两个集合的并集,使用了 retainAll()
方法来求两个集合的交集。注意,差集和交集的结果会保留在原始的 List 中,而并集的结果存储在一个新的 Set 中。
Stream API实现
可以使用Java 8的Stream API来实现。以下是示例代码:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class SetOperations {
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> difference = list1.stream()
.filter(item -> !list2.contains(item))
.collect(Collectors.toList());
System.out.println("差集:");
difference.forEach(System.out::println);
// 求并集
Set<String> union = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.toSet());
System.out.println("\n并集:");
union.forEach(System.out::println);
// 求交集
List<String> intersection = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
System.out.println("\n交集:");
intersection.forEach(System.out::println);
}
}
这个示例中使用了Stream API的一些常用操作,如filter()
、collect()
、concat()
等来实现求差集、并集和交集。通过filter()
筛选出符合条件的元素,collect()
将结果收集到一个新的集合中,concat()
合并两个流,最后通过forEach()
遍历打印结果。
输出结果与之前的示例代码相同:
差集:
A
并集:
A
B
C
D
交集:
B
C
使用Java的Stream API可以更加简洁地实现集合操作,并且具有函数式编程的特性。
第三方库工具
常用的几个第三方库:
- Apache Commons Collections: Apache Commons Collections 是一个常用的 Java 工具类库,提供了很多集合操作的工具类。可以使用
CollectionUtils
类中的subtract()
方法求取两个集合的差集,union()
方法求取两个集合的并集,intersection()
方法求取两个集合的交集。 示例代码:
import org.apache.commons.collections4.CollectionUtils;
List<String> list1 = Arrays.asList("A", "B", "C");
List<String> list2 = Arrays.asList("B", "C", "D");
// 求差集
Collection<String> difference = CollectionUtils.subtract(list1, list2);
System.out.println("差集:");
difference.forEach(System.out::println);
// 求并集
Collection<String> union = CollectionUtils.union(list1, list2);
System.out.println("\n并集:");
union.forEach(System.out::println);
// 求交集
Collection<String> intersection = CollectionUtils.intersection(list1, list2);
System.out.println("\n交集:");
intersection.forEach(System.out::println);
输出结果与之前的示例代码相同。
- Google Guava: Google Guava 是 Google 提供的一个功能丰富的 Java 工具包,其中的
Sets
类提供了各种集合操作的方法。可以使用Sets.difference()
方法求取两个集合的差集,Sets.union()
方法求取两个集合的并集,Sets.intersection()
方法求取两个集合的交集。 示例代码:
import com.google.common.collect.Sets;
Set<String> set1 = Sets.newHashSet("A", "B", "C");
Set<String> set2 = Sets.newHashSet("B", "C", "D");
// 求差集
Set<String> difference = Sets.difference(set1, set2);
System.out.println("差集:");
difference.forEach(System.out::println);
// 求并集
Set<String> union = Sets.union(set1, set2);
System.out.println("\n并集:");
union.forEach(System.out::println);
// 求交集
Set<String> intersection = Sets.intersection(set1, set2);
System.out.println("\n交集:");
intersection.forEach(System.out::println);
输出结果与之前的示例代码相同。 这些第三方库提供了更便捷的方式来实现集合操作,可以根据自己的需求选择适合的工具类。 确保在使用第三方库之前,先添加相应的依赖到项目中。
评论区