1

我想非常有效地找到几组的并集,因为它的时间对整个系统有重要影响。

假设我们的集合如下所示:

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 套,你有什么建议?

4

0 回答 0