我想非常有效地找到几个集合的并集,因为它的时间对整个系统有重要影响。
让我们认为我们的集合如下:
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)
实际上,我认为这个解决方案很有效,但我想知道:
- 我们可以直接使用番石榴的Sets.union,但似乎上述解决方案比这更有效。
- 我们可以使用最终集合,并且对于每个集合的每个元素,我们使用contains方法检查此最终集合是否包含元素。
如果我们有100套,你有什么建议?