Scala列表连接比较
scala中的列表连接有两种方法:Scala列表连接比较,scala,Scala,scala中的列表连接有两种方法::和++。 例如,有3个列表-x、y、z。我听说x::y::z比x++y++z快,因为:是正确的关联x:::y::z解析为x::(y:::z)。 我接下来的问题是: 上面这个词是真的吗 :和++的时间复杂度是多少 上面这个词是真的吗 不,两者都需要O(n)时间来确定列表::是右关联的,它将首先连接y和z,然后连接x(x::(y:::z)),其中+将首先连接x和y,然后连接z((x+++y)++z) ::和++的时间复杂度是多少 O(n)。具体来说,列表[A]上的
:
和++
。
例如,有3个列表-x、y、z。我听说x::y::z
比x++y++z
快,因为:
是正确的关联<代码>x:::y::z解析为x::(y:::z)
。
我接下来的问题是:
:
和++
的时间复杂度是多少y
和z
,然后连接x
(x::(y:::z))
,其中+
将首先连接x
和y
,然后连接z
((x+++y)++z
)
::和++的时间复杂度是多少
O(n)。具体来说,列表[A]
上的++
经过优化,可以在内部使用:
来连接两个列表:
override def ++[B >: A, That](that: GenTraversableOnce[B])
(implicit bf: CanBuildFrom[List[A], B, That]): That =
if (bf eq List.ReusableCBF) (this ::: that.seq.toList).asInstanceOf[That]
else super.++(that)
对于答案,请解释为什么
:
比++
@pacman快,它不是。正如我所说,列表[A]
上的++
将在内部调用:
。这篇文章中我读到:
比++
快,你明白我的意思了吗?@pacman我不知道为什么OP会这样写。实现细节是,++
经过优化,可以使用:
,因此您不应该在这里注意到任何性能差异。我将试着解释他在回答中的意思。