Kotlin Array 的 toList 和 asList 有何不同?
Kotlin 类提供 、 和 方法。前两个方法都返回 a,并在 Kotlin 参考中进行了如下描述:Array
asList()
toList()
toMutableList()
List
-
asList()
返回 包装原始 .List
Array
-
toList()
返回 包含 [原始元素] 的所有元素的 。List
Array
这些方法似乎是可互换的。这两种方法在实践中有何不同?
Kotlin 类提供 、 和 方法。前两个方法都返回 a,并在 Kotlin 参考中进行了如下描述:Array
asList()
toList()
toMutableList()
List
asList()
返回 包装原始 .List
Array
toList()
返回 包含 [原始元素] 的所有元素的 。List
Array
这些方法似乎是可互换的。这两种方法在实践中有何不同?
创建的列表保留对原始 .
使用 / 创建的列表由原始 .asList
Array
toList
toMutableList
Array
作为列表
该函数创建一个重用同一实例的列表,这意味着对原始数组的更改也会对 :asList
Array
List
val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()
arr[0] = 4
println(l1) // [4, 2, 3]
到列表
对于 /则情况并非如此,因为数组是复制的:toList
toMutableList
val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()
arr[0] = 4
println(l2) // [1, 2, 3]
Kotlin 源代码可以在这里找到。
基本上仍然保持对原始的引用。这意味着该列表的突变也会使底层发生突变。asList()
Array
Array
toList()
只是简单地将 的值复制到一个新的,但之后没有徘徊的链接。Array
List
对于大多数用例,它们可能是可互换的。 可能会具有稍好的性能(因为它不执行复制),并且将是针对意外突变的“安全”副本。asList()
toList()