ArrayとArrayBufferのどっちがどのくらいパフォーマンスがいいか調べる

こんなコードで試してみた。

object cm2 {
  def main(argv: Array[String]) {
      //count("ArrayBuffer", argv(0), func_arraybuf )
      count("Array", argv(0), func_array )
  }

  def func_array(src: String): Unit = {
    val a = new Array[String](100)
    for (i <- 0 until a.size) a(i) = src
  }

  def func_arraybuf(src: String): Unit = {
    val b = new scala.collection.mutable.ArrayBuffer[String]
    for (i <- 0 to 99) b.append(src)
  }

  def count(title: String, param: String, func: (String) => Unit): Unit = {
      println(title)
      val st = java.lang.System.nanoTime()
      func(param)
      println(java.lang.System.nanoTime() - st)
  }
}

// vim: set ts=4 sw=4 et:

なんでArrayBufferがコメントアウトされてるかというと、ArrayBufferとArrayは相互に影響するらしく、はじめの一回目に実行されるArray初期化処理および内容設定処理にかなり時間がかかり、次に行われる処理では時間がかなり短縮されるのだ。

ArrayBufferでの処理時間

$ java cm2 hoge
ArrayBuffer
75020701

Arrayでの処理時間

$ java cm2 hoge
Array
36957734

ArrayBufferの方がArrayより2倍ほど時間がかかるらしい。大した差ではない。