我有两个巨大的(如数百万个条目)集合(HashSet),它们之间有一些(< 10%)重叠。我需要将它们合并为一组(我不关心维护原始集合)。
目前,我正在将一组中的所有项目添加到另一组:
setOne ++= setTwo
这需要几分钟才能完成(在成员调整hashCode()几次后)。
任何想法如何加快速度?
答案 0 :(得分:5)
使用Scala 2.9.0 +中的Parallel Collections API可以获得更好的性能:
setOne.par ++ setTwo
或
(setOne.par /: setTwo)(_ + _)
答案 1 :(得分:2)
您可能想尝试一些事情:
sizeHint
方法将您的设置保持在预期的大小。useSizeMap(true)
以获得更好的哈希表调整大小。在我看来,后一个选项可以提供更好的结果,尽管两者都显示了对测试的改进。
答案 2 :(得分:0)
你能告诉我一些关于集合内部数据的信息吗?我问的原因是,对于这种事情,你通常需要一些专门的东西。这里有一些可以做的事情:
我已经使用了第一个策略,在大约一秒钟内从大约4万个较小的集合中创建了一个大约800万个整数的巨大集合(在Scala上的强大硬件上)。