2017-01-02 84 views
1

有兩種方法可以連接列表中階::::++。例如,有3個列表 - x,y,z。我聽說x ::: y ::: zx ++ y ++ z快,因爲:::是正確的聯想。 x ::: y ::: z被解析爲x ::: (y ::: z)。 我的問題是:斯卡拉列表連接比較

  1. 上面的術語是真的嗎?
  2. 什麼是:::++這兩個時間複雜度。

回答

1

是真的

沒有上面來看,都需要O(n)的時間來Concat的名單。 :::是正確的關聯,它會它會Concat的yz第一,然後xx ::: (y ::: z)),其中++將Concat的xy第一,然後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) 
+0

THX的回答,請解釋一下我爲什麼'':::比''++更快 – pacman

+0

@pacman它不是。正如我所說的,在List [A]上的'++'將在內部調用':::'。無論採取O(n)的時間 –

+0

在這篇文章中,我讀了'':::比快''++ https://stackoverflow.com/questions/6559996/scala-list-concatenation-vs – pacman