. .
, , get, , , , Sun JVM , . , ArrayList - .
( Scala, Java ArrayList), , , () :
object ArraySpeed {
def ptime[A](f: => A) = {
val t0 = System.nanoTime
val ans = f
printf("Elapsed: %.3f seconds\n",(System.nanoTime-t0)*1e-9)
ans
}
val a = Array.range(0,1000000).map(x => new java.lang.Integer(x))
val b = new java.util.ArrayList[java.lang.Integer]
a.foreach(x => b.add(x))
var j = 0
def jfroma = {
var i=0
while (i<1000000) {
j += a(i).intValue
i += 1
}
j
}
def jfromb = {
var i=0
while (i<1000000) {
j += b.get(i).intValue
i += 1
}
j
}
def main(args: Array[String]) {
for (i <- 1 to 5) {
ptime(for (j <- 1 to 100) yield jfroma)
ptime(for (j <- 1 to 100) yield jfromb)
println
}
}
}
:
$ scalac ArraySpeed.scala
$ scala ArraySpeed
Elapsed: 0.324 seconds // This is direct array access
Elapsed: 0.378 seconds // This is ArrayList
Elapsed: 0.326 seconds
Elapsed: 0.389 seconds
Elapsed: 0.355 seconds
Elapsed: 0.349 seconds
Elapsed: 0.323 seconds
Elapsed: 0.333 seconds
Elapsed: 0.318 seconds
Elapsed: 0.331 seconds
Scala - - Java, . ( scala - java .)