【发布时间】:2021-02-06 22:02:40
【问题描述】:
我很想知道 Kotlin 的 toList 是在什么中返回的,所以我测试了它。
fun loop(i: Int){
for(i in 0..i){}
}
fun main() {
val list: List<Int> = (1..100000).toList()
val arr = IntArray(100000) { i -> i}
println("list : ForLoop Time: " + measureNanoTime {
for (i in list) { loop(i) }
})
println("list : ForEach Time: " + measureNanoTime {
list.forEach { i -> loop(i) }
})
println("Array : ForLoop Time: " + measureNanoTime {
for (i in arr) { loop(i) }
})
println("Array : ForEach Time: " + measureNanoTime {
arr.forEach { i-> loop(i) }
})
}
输出:
我查了一下,toList是以Array的形式返回的,但是不知道为什么速度相差很大。 toList 是否作为 LinkedList 返回?
我想知道。
【问题讨论】:
-
对于基准测试,您应该openjdk.java.net/projects/code-tools/jmh
-
这不是一个有效的基准。您需要一个基准测试库。
-
IntArray是 JVM 中使用的原始数组,因此应该比ArrayList或任何实现要快得多(因为它肯定会保存引用而不是原始值)。