Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中连接两个ITerable(或序列)的最快方法是什么?_Scala_Collections - Fatal编程技术网

在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