Java Kotlin阵列';toList和asList有什么不同?
KotlinJava Kotlin阵列';toList和asList有什么不同?,java,arrays,list,reference,kotlin,Java,Arrays,List,Reference,Kotlin,KotlinArray类提供了asList()、toList()和toMutableList()方法。前两种方法都返回一个列表,在中描述如下: asList()返回一个包装原始数组的List toList()返回一个包含[原始数组]的所有元素的列表 这些方法似乎可以互换。这两种方法在实践中有什么不同;博士 使用asList创建的列表保留了对原始数组的引用 使用toList/toMutableList创建的列表由原始数组的副本支持 解释 asList asList函数创建一个列表,该列表重用相
Array
类提供了asList()
、toList()
和toMutableList()
方法。前两种方法都返回一个列表
,在中描述如下:
返回一个包装原始asList()
数组的
List
返回一个包含[原始toList()
]的所有元素的数组
列表
asList
创建的列表保留了对原始数组的引用
使用toList
/toMutableList
创建的列表由原始数组的副本支持
解释
asList
asList
函数创建一个列表,该列表重用相同的数组
实例,这意味着对原始数组的更改也会影响列表
:
val arr = arrayOf(1, 2, 3)
val l1 = arr.asList()
arr[0] = 4
println(l1) // [4, 2, 3]
toList
toList
/toMutableList
的情况并非如此,因为数组是复制的:
可以找到Kotlin源代码。基本上asList()
仍然保留对原始数组的引用。这意味着对该列表的突变也将使底层的数组发生突变
toList()
只是简单地将数组的值复制到一个新的列表中,但之后没有延迟链接
对于大多数用例,它们可能是可互换的asList()
可能会有稍好的性能(因为它不执行复制),而toList()
将是一个针对意外突变的“安全”复制
val arr = arrayOf(1, 2, 3)
val l2 = arr.toList()
arr[0] = 4
println(l2) // [1, 2, 3]