2013-02-25 120 views
0

我創建一個列表如下:困惑追加到一個列表

var multiList : List[MyObj] = Nil 

要追加對象名單我使用:

multiList = multiList ::: List(MyObj) 

這個工作,但我現在不使用

multiList = multiList ::: MyObj 

在這裏,我正在追加一個對象到列表中,在示例中(它的工作原理)它看起來在語法上看起來好像即時追加一個新的List一個列表 ?

回答

3

:::運算符表示連接,而不是附加。元素追加有:+

+0

我想強調':+'作爲O(n)在列表情況下的複雜性(有必要仔細閱讀整個列表附加到它)如此如果你需要經常追加,你應該切換到另一個數據結構。請參閱[Scala集合性能特徵](http://www.scala-lang.org/docu/files/collections-api/collections_40.html) – Xion345 2013-02-25 21:09:45

1

::方法用於將東西「預先」添加到列表中。 :::運算符用於將一個列表添加到另一個列表。所述::以冒號結尾,因此是「右結合」可以解釋如下

X ::ý

//將被轉換爲

y.::(x)

所以你的對象添加到空列表,你可以做

MyObj中::無

//將被轉換爲

Nil.::(MyObj)

如果你想對象的列表添加到空列表,你可以做

列表(MyObj中,MyObj中):::無

//將被轉換爲

Nil.:::(List(MyObj,MyObj中))

如果你想添加,你可以使用:+方法。然而,這對於不同類型的收藏有不同的表現。有關性能的更多信息可以在這裏找到:Performance Characteristics