我见过的大多数 Kotlin 示例和实际代码库都是通过常规列表执行操作的。
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf(Person("John", 29), Person("Jane", 31))
people.filter { it.age > 30 }.map { it.name }
}
Run Code Online (Sandbox Code Playgroud)
在现实世界的场景中,使用序列而不是列表更有意义,反之亦然?
people.asSequence().filter { it.age > 30 }.map { it.name }
Run Code Online (Sandbox Code Playgroud)
直觉告诉我们,序列的性能应该更好,因为它们专注于在处理下一个项目之前完全处理单个项目。集合的处理似乎是对资源的巨大浪费,因为我们必须在此过程中创建多个中间集合。
然而,现实却大不相同 - 两种解决方案都具有相当的性能,并且我相信潜在的差异实际上有利于集合(Kotlin 1.8.x)。有几个原因:
map()我们预先知道结果列表的大小,因此我们可以为其分配空间。序列需要复制数据才能增长。其中一些问题将来可以通过内联序列处理来解决。那么他们在性能方面通常应该更胜一筹。现在我想说集合是默认方法,我们可以在非常特定的情况下使用序列,例如:
类似这样的例子可能还有更多。一般来说,如果您发现有理由逐一处理项目,那么序列正是允许这样做的。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |