まだまだscalaをよくわかってないんですが、
以下のように乱数リストを作って、
それを文字列にするというめっちゃくちゃなことをしてみたら
java.lang.OutOfMemoryErrorが出ちゃいました。
調べたら、色々出てきました。
モバイル開発系(K)-Scala Tips JVMのメモリ割り当てサイズを指定する [-J-Xmx, -J-Xms]
それを踏まえて以下のようにListとVectorを比較してみました。
List
import scala.util.Random // 乱数List val randomList = Random.shuffle(List.tabulate(10000000)(identity[Int])) // 時間計測 val start = System.currentTimeMillis randomList.toString println((System.currentTimeMillis - start) + "msec")
結果はこんな感じでした。
$scala -J-Xmx1024m iterate.scala
22593msec
Vector
import scala.util.Random //乱数Vector val randomVector = Random.shuffle(Vector.tabulate(10000000)(identity[Int])) //時間計測 val start = System.currentTimeMillis randomVector.toString println((System.currentTimeMillis - start) + "msec")
$scala -J-Xmx1024m iterate.scala
12180msec
ListはIndexSeqなので結構遅いんですね。
一回作ってひたすら参照のみする場合などは、Listなんでしょうかね。
ただ、Listを使うなってことはなくて、場合によりけりだそうです。
tnoda-scala • ListBufffer → まちがい,ArrayBuffer → 正解,List → 大正解