我想非常有效地找到几组的并集,因为它的时间对整个系统有重要影响。
假设我们的集合如下所示:
s1 - 1, 2, 3, 4, 5, 6
s2 - 1, 2, 4, 8, 10, 12, 15, 18, 21
s3 - 1, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33
根据一种解决方案:
他们事先找到了集合的交集。
s1, s2 (or s12) - 1, 2, 4
s1, s3 (or s13) - 1
s2, s3 (or s23) - 1
当他们需要计算这 3 个集合的并集时,它们既有单独的集合也有交集。所以,
res1 = Sets.difference(s1, s12)
res1 = Sets.difference(res1, s13)
finalRes.addAll(res1)
res2 = Sets.difference(s2, s23)
finalRes.addAll(res2)
finalRes.addAll(s3)
实际上,我认为这个解决方案是有效的,但我想知道:
- 可以直接使用guava的Sets.union吗,不过貌似上面的方案比这个更高效。
- 我们可以使用最终集合吗?对于每个集合的每个元素,我们检查这个最终集合是否包含元素或不使用 contains 方法。
如果我们有 100 套,你有什么建议?