java - Java 中集合的并集和交集(生成拓扑)

标签 java collections set

我正在尝试测试一个可能的拓扑,它是一组开集。为此,我需要找到集合的并集和交集。这样做我可以创建一个 Generated Topology 。我认为我能找到的最好的方法,至少不需要使用外部库 - 似乎 Google 有一个具有 Multiset 功能的 Guava 库,就是执行诸如 following 之类的操作。 (最后一个答案):

Set<Set<String>> myCollection = new HashSet<>();

当我可以以某种方式循环并将集合添加到“myCollection”时,我不知道是否值得尝试学习 Multiset 的各种方法。关于使用 Multiset 或 Bag 等东西的真正好处有什么建议吗?

更具体地说,我会有一组子集(超集),例如 {{A,B,D}, {B,C}},我们可以看到 {A ,B,D} U {B,C} = {A,B,C,D}${A,B,D} ∩ {B,C} = {B}$ code> 因此是 {{A,B,D}, {B,C}, {B}, {A,B,C,D}} 的新超集。 超集不会变得非常大,最多可能有几十个元素。

最佳答案

当您需要一个可以包含多个相同元素的Set时,Multiset非常有用(因为一个Set只能容纳一个每个元素)。

如果您正在寻找多个 Set 的并集或交集,那么我确实建议使用 Google 的 Guava 库,因为它具有以下方法在 Sets.java 中对您有用:

static <E> Sets.SetView<E> union(Set<? extends E> set1, Set<? extends E> set2)
static <E> Sets.SetView<E> intersection(Set<E> set1, Set<?> set2)

如果您不想使用 Guava,那么有一些方法可以在 Java 中找到两个集合的并集和交集:

Set<Integer> first = new HashSet<>(Arrays.asList(1, 3, 5, 7));
Set<Integer> second = new HashSet<>(Arrays.asList(2, 4, 6, 8));

// Creates a new Set as a copy of 'first' and then adds every element from 'second' into the new Set, creating a union.
Set<Integer> union = new HashSet<>(first);

union.addAll(second);

System.out.println(union);

>> {1, 2, 3, 4, 5, 6, 7, 8}

// Creates a new Set as a copy of 'first' and then removes every element from the new Set that is not contained within 'second', creating an intersection.
Set<Integer> intersection = new HashSet<>(first);

intersection.retainAll(second);

System.out.println(intersection);

>> {}

关于java - Java 中集合的并集和交集(生成拓扑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646394/

相关文章:

java - 在已生成的 SOAP 信封的安全 header 中插入用户名 token 会给我两个 header !

algorithm - 集合 S of n numbers - 有一个子集,其中 S 的每个元素出现的概率相等

algorithm - 一组非常小的整数的高效数据结构

java - 为什么 Java Set 上的 ConcurrentModificationException 会转储有关 Map 迭代器的堆栈跟踪?

c# - 在 LINQ 中加入两个集合

java - 字符串到 int。无效整数

java - 如何获取服务器证书链然后在 Java 中验证它的有效性和可信性

java - JAXB - 添加多个@XmlElement

java - 将字符串转换为 map 列表

java - 如何使用 java 反射返回包含对象以外的内容的集合