1
有兩種方法可以連接列表中階::::
和++
。例如,有3個列表 - x,y,z。我聽說x ::: y ::: z
比x ++ y ++ z
快,因爲:::
是正確的聯想。 x ::: y ::: z
被解析爲x ::: (y ::: z)
。 我的問題是:斯卡拉列表連接比較
- 上面的術語是真的嗎?
- 什麼是
:::
和++
這兩個時間複雜度。
有兩種方法可以連接列表中階::::
和++
。例如,有3個列表 - x,y,z。我聽說x ::: y ::: z
比x ++ y ++ z
快,因爲:::
是正確的聯想。 x ::: y ::: z
被解析爲x ::: (y ::: z)
。 我的問題是:斯卡拉列表連接比較
:::
和++
這兩個時間複雜度。是真的
沒有上面來看,都需要O(n)的時間來Concat的名單。 :::
是正確的關聯,它會它會Concat的y
和z
第一,然後x
(x ::: (y ::: z))
,其中++
將Concat的x
和y
第一,然後z
((x ++ y) ++ z
)。
是什麼時候都複雜的:::和++
爲O(n)具體地,++
上List[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)
THX的回答,請解釋一下我爲什麼'':::比''++更快 – pacman
@pacman它不是。正如我所說的,在List [A]上的'++'將在內部調用':::'。無論採取O(n)的時間 –
在這篇文章中,我讀了'':::比快''++ https://stackoverflow.com/questions/6559996/scala-list-concatenation-vs – pacman