3 回答
TA贡献1982条经验 获得超2个赞
如果使用listOf,您将获得List带有只读List接口的某种实现,其中包含您作为参数提供的元素。通过使用此功能,意味着您不关心它的实现方式。
它实际上由的支持Arrays.ArrayList,这是一个稍有不同的类。
如果mutableListOf再次使用,则只是在说您想要包含实现的元素的东西MutableList,但是实现取决于标准库。同样,当前由来支持ArrayList,但这是一个实现细节。
如果需要,有几个函数可以显式地返回更特定的类型。有arrayListOf,sortedSetOf,linkedMapOf,和一对夫妇更多-有不正好是一个linkedListOf,但你很可能实现它自己,如果你需要一个,不希望使用LinkedList构造函数。
比较通用listOf,mutableListOf如果有更改,则最好在以后在平台之间共享代码-因为它们是标准库的一部分,因此它们可以ArrayList在JVM上返回,但是如果您编译为JavaScript或Native则可以返回特定于平台的实现。
TA贡献1946条经验 获得超3个赞
它既不是LinkedList也不是ArrayList。根据源代码:
public fun <T> listOf(element: T): List<T> = java.util.Collections.singletonList(element)
或者,对于多个元素:
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()
最后一段代码调用ArraysUtilJVM,而后者又调用Arrays.asList(),返回一个Arrays.ArrayList实例。但是,这是一个实现细节,将来可能会更改。重要的是,结果对象实现了List接口(即,它是不可变的)。
添加回答
举报
