有效地查找可变数量的字符串集的交集
2022-09-01 00:47:15
我有一个可变数量的ArrayList,我需要找到它的交集。字符串集数量的实际上限可能在35左右,但可能会更多。我不想要任何代码,只是关于什么可以有效的想法。我有一个即将开始编码的实现,但想听听其他一些想法。
目前,只要想想我的解决方案,看起来我应该有一个渐近运行时Θ(n2)。
感谢您的任何帮助!
tshred
编辑:为了澄清,我真的只是想知道是否有更快的方法来做到这一点。比 Θ(n2) 快。
我有一个可变数量的ArrayList,我需要找到它的交集。字符串集数量的实际上限可能在35左右,但可能会更多。我不想要任何代码,只是关于什么可以有效的想法。我有一个即将开始编码的实现,但想听听其他一些想法。
目前,只要想想我的解决方案,看起来我应该有一个渐近运行时Θ(n2)。
感谢您的任何帮助!
tshred
编辑:为了澄清,我真的只是想知道是否有更快的方法来做到这一点。比 Θ(n2) 快。
Set.retainAll()
是查找两个集合的交集的方法。如果你使用 ,那么将 s 转换为 s 并在循环中使用所有这些实际上是 O(n)。HashSet
ArrayList
Set
retainAll()
接受的答案很好;作为更新:从Java 8开始,有一种稍微更有效的方法来找到两个s的交集。Set
Set<String> intersection = set1.stream()
.filter(set2::contains)
.collect(Collectors.toSet());
它稍微更有效的原因是,原始方法必须添加其中的元素,然后如果它们不在 中,则必须再次删除。这种方法只会在结果集中增加需要包含的内容。set1
set2
严格来说,在Java 8之前你也可以这样做,但是如果没有s,代码会更加费力。Stream
如果两个集的大小差异很大,则您更喜欢流式传输而不是较小的集。