2011-08-15 9 views

答えて

3

不思議なことに、sizelengthListBuffer docsで異なる記述を持っています。確かに、ListBuffer.lengthは一定時間です。 Scala 2.8以前では、lengthは確かにO(n)でしたが、これはnow fixedです。 implementation of sizeTraversableOnceであることは、それがO(n)であることを示唆していますが、何か不足している可能性があります。

その他のScalaコレクションのパフォーマンス特性はdocumented hereです。 ListBufferのために特別に、

   head  tail  apply update prepend append insert 
ListBuffer C  L  L  L  C  C  L 

Cは定数であり、Lは線形時間です。

編集:ListBuffer長さとサイズの両方について、(1)Oれる - @KiptonBarros言及問題はスカラで閉じた参照2.9.1:https://issues.scala-lang.org/browse/SI-4933

+1

両方 'length'と' size'はTraversableOnce 'に線形であります'。実際、 'ListBuffer'の' size'は 'underlying'に転送されるため、' ListBuffer'の 'size'は線形です。これは' ListBuffer'の 'List'です。それはチケットの価値がある。 –

+1

'append'は定数で、' tail'は線形のままです。 –

+1

'tail 'は新しいコレクションを生成し、' append'は既存コレクションを変更します。 – soc

関連する問題