动机
我需要在代码中示例化分数,而不考虑浮点值的舍入误差,因此,我决定使用一对整数值,一个用于分子,另一个用于分母。
问题
我不知道该用什么:Pair<Int, Int
、List<Int>
或IntArray
(大小为2的数组和列表)?哪个示例的创建和释放速度最快?
测量
我写了这段代码:
fun main() {
var b: Any
val elapsedPair = measureNanoTime {
for (i in 0..100000000) {
b = Pair(-2, 1)
}
}
println(elapsedPair)
val elapsedList = measureNanoTime {
for (i in 0..100000000) {
b = listOf(-2, 1)
}
}
println(elapsedList)
val elapsedArray = measureNanoTime {
for (i in 0..100000000) {
b = intArrayOf(-2, 1)
}
}
println(elapsedArray)
}
并且每次都得到这些结果(不是确切的数字,而是它们的顺序):
> 16338200
> 1340355300
> 6129200
很明显,数组是最快的(因为它们在堆栈上),而列表是最慢的。但是编译器可能已经对数组进行了一些优化,所以这些结果并不具有代表性。也许有一些底层的对示例化优化,在大多数情况下会使对创建比数组创建更快。
1条答案
按热度按时间83qze16e1#
使用数据类:
使用起来真的很方便:
您甚至可以添加自己的运算符:
至于性能,在你证明它是一个问题之前,它并不是一个问题。和性能问题一样,你需要在牺牲代码可读性之前,测量并确定真实的的潜在问题是什么。