Kotlin Array
课程提供asList()
,toList()
和toMutableList()
方法。前两个方法都返回List
,并在Kotlin reference中描述如下:
asList()
返回包裹原始List
的{{1}}。Array
会返回toList()
,其中包含[原始List
]的所有元素。这些方法似乎可以互换。这两种方法在实践中有何不同?
答案 0 :(得分:35)
使用asList
创建的列表会保留对原始 Array
的引用。
使用toList
/ toMutableList
创建的列表由原始Array
的副本支持。
<强> asList 强>
asList
函数创建一个重用 Array
实例的列表,这意味着对原始数组的更改也会对List
:
val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()
arr[0] = 4
println(l1) // [4, 2, 3]
<强> toList 强>
toList
/ toMutableList
不是这种情况,因为数组是复制的:
val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()
arr[0] = 4
println(l2) // [1, 2, 3]
可以找到Kotlin源代码here。
答案 1 :(得分:8)
基本上asList()
仍然保留对原始Array
的引用。这意味着该列表的突变也会改变基础Array
。
toList()
只是将Array
的值复制到新的List
中,但之后没有延迟链接。
对于大多数用例,它们可能是可互换的。 asList()
可能会有稍微好一点的性能(因为它没有执行副本),而toList()
将是针对意外突变的“安全”副本。