在Scala中连接两个ITerable(或序列)的最快方法是什么?
假设我想通过连接多个在Scala中连接两个ITerable(或序列)的最快方法是什么?,scala,collections,Scala,Collections,假设我想通过连接多个Iterable来创建一个Iterable。最快的方法是什么 对于ListBuffer,它的++=表示 将TraversableOnce生成的所有元素追加到此列表缓冲区 这听起来像是一个接一个地追加元素,因此需要Ω(iterable的大小)时间。我想要在O(1)时间中连接两个Iterables的东西。列表的方法是否在O(1)时间内运行?文件仅仅说明 将给定列表的元素添加到此列表前面 我还签出了scala集合,但它没有说明如何连接两个集合。您可以创建一个流: Stream(a,
Iterable
来创建一个Iterable
。最快的方法是什么
对于ListBuffer
,它的++=
表示
将TraversableOnce生成的所有元素追加到此列表缓冲区
这听起来像是一个接一个地追加元素,因此需要Ω(iterable的大小)时间。我想要在O(1)
时间中连接两个Iterable
s的东西。列表的方法是否在O(1)
时间内运行?文件仅仅说明
将给定列表的元素添加到此列表前面
我还签出了scala集合,但它没有说明如何连接两个集合。您可以创建一个流
:
Stream(a, b, c).flatten
或者连接迭代器(这会在运行时为您提供流
)
(假设a
,b
和c
是Iterable[Int]
)
这将为您提供类似于O(要加入的集合数)
流是按需计算的,所以在您实际请求任何元素之前,闭包的内存分配很少。转换为其他任何东西都不可避免地是O(n)
>转换为其他任何东西都不可避免地是O(n)。这听起来不像是比:
有什么改进。是吗?任何简单的链表都可以在O(要加入的集合数)
中执行此任务。秩序并不重要。我对Scala有点陌生…@Kakaji不会把收藏数量和大小混为一谈。在这里,收藏的数量是3(a,b和c)。哦,我明白了。听起来很棒!
(a.iterator ++ b.iterator ++ c.iterator).toIterable