我对scala很新,今天在尝试时我想测试一个非常简单的程序的性能:
import java.util.Scanner
import scala.annotation.tailrec
object Tests {
def main(args: Array[String]): Unit = {
val sc = new Scanner(System.in)
println("Enter a positive number : ")
val length = sc.nextInt
val fp_t0 = System.currentTimeMillis
val list1 = fpListFill(List(), length)
val fp_t1 = System.currentTimeMillis
println(s"[fp]: time to fill the list = ${fp_t1 - fp_t0} ms")
}
@tailrec
def fpListFill(list: List[Int], count: Int): List[Int] = {
if (count == 0) count :: list
else fpListFill(count :: list, count - 1)
}
}
它只是向用户询问正数字长度,然后以递归方式创建长度为“length”的列表。
我测试了两种不同的方式,每次我都要求一个长度为1'000'000的列表
首先我用scalac编译代码并在终端中使用scala运行,这给了我:
Enter a positive number :
1000000
[fp]: time to fill the list = 795 ms
然后,我在IntelliJ IDEA中创建了一个小项目,我在其中复制了上面的代码。在那里运行程序,这就是我得到的:
Enter a positive number :
1000000
[fp]: time to fill the list = 25 ms
正如您所看到的,在性能方面存在很大差异。有人知道为什么吗? Thx提前。