チョットハヤイLongMapを計測してみる

Scaladoc調べてたらLongMapとかいうのを発見した。2.7からimmutableなLongMapが、2.11でmutableなものが実装されている。

Scaladocによると「Longに特化したHashMapでHashMapよりはやい」とのことなので軽くテストしてみた。

import scala.collection.immutable.LongMap
import scala.util.Random

object Main {
  val Max = 1000000L
  val Xs = (0L to Max)
  val random = new Random()
  val randoms = Xs.map(_ => math.abs(random.nextLong % Max))

  def main(args: Array[String]): Unit = {
    println("Map: " + timer {
      val map = Xs.map(it => it -> it.toString).toMap
      randoms.map(map.apply)
    }.toString)

    println("LongMap:" + timer {
      val map = LongMap(Xs.map(it => it -> it.toString):_*)
      randoms.map(map.apply)
    }.toString)
  }

  def timer(f: => Any): Long = {
    val start = System.currentTimeMillis
    f
    System.currentTimeMillis - start
  }
}

計測結果は、

Map
1387ms
LongMap
1030ms

言うほど差が出る訳でも無さそう…?