集合运算
集合运算:求交集,并集,差集。以及求子集和补集。(图片来自百科)
工具类
import java.util.*;
class SetUtil {
// 并集
static <T> Set<T> union(Set<T> a, Set<T> b) {
Set<T> unionSet = new LinkedHashSet<T>(a);
unionSet.addAll(b); // Set容器中元素唯一,不会重复。
return unionSet;
}
// 交集
static <T> Set<T> intersection(Set<T> a, Set<T> b) {
Set<T> intersectionSet = new LinkedHashSet<T>(a);
intersectionSet.retainAll(b); // 只保留二者皆有的元素。
return intersectionSet;
}
// 差集
static <T> Set<T> different(Set<T> a, Set<T> b) {
Set<T> differentSet = new LinkedHashSet<T>(a);
differentSet.removeAll(b); // 删除a中二者皆有的元素。
return differentSet;
}
}
测试
public static void main(String[] args) {
HashSet<Integer> a = new HashSet<>(Arrays.asList(new Integer[]{1, 2, 3, 4, 5}));
HashSet<Integer> b = new HashSet<>(Arrays.asList(new Integer[]{3, 4, 5, 6, 7}));
System.out.println(a);
System.out.println(b);
System.out.println("并集:" + SetUtil.union(a, b));
System.out.println("交集:" + SetUtil.intersection(a, b));
System.out.println("差集:" + SetUtil.different(a, b));
System.out.println("差集:" + SetUtil.different(b, a));
System.out.println("差集:" + SetUtil.different(a, a));
}
输出
[1, 2, 3, 4, 5]
[3, 4, 5, 6, 7]
并集:[1, 2, 3, 4, 5, 6, 7]
交集:[3, 4, 5]
差集:[1, 2]
差集:[6, 7]
差集:[]