如果我知道两个集合中的一个会比另一个集合更大,是否有任何推荐的方法来调用Set.union?
Set.union large small
或
Set.union small large
由于
答案 0 :(得分:6)
在内部,集合表示为平行树(您可以check the source online)。在计算集合的并集时,算法将较小的集合(树)基于来自较大集合(树)的根的值分成一组较小的元素和一组较大的元素。拆分总是在较小的集合上执行,以减少工作量。然后它递归地联合两个左右子集并执行一些重新平衡。
摘要,算法并不真正取决于哪个集合是第一个集合,哪个集合是第二个参数。它总是会选择更好的选项,具体取决于set的大小(存储为数据结构的一部分)。
答案 1 :(得分:1)
通过利用此函数实现的未记录功能,使用Set.union
时,您的问题背后的意图似乎可以提高性能。但Set.union
将您从实现复杂性中抽象出来,只留下 union 操作的集合论意义,该操作对于参数属性是不可知。实际上突破这个抽象层会对代码的复杂性和可维护性产生不利影响,应该避免使用。
虽然有时您别无选择,只能处理leaky abstractions,但Set.union
绝对不是这样。 hear from Tomas Set.union
实现没有漏洞的抽象缺陷是很好的。
答案 2 :(得分:0)
做你想做的事。您也可以small + large
和large - small
获取差异(当然还有small - large
)。