Screaming Loud

日々是精進

ScalaのListとVector適当に比較してみた。

まだまだ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 → 大正解