Java中最受欢迎的列表是ArrayList
和LinkedList
。
在Kotlin中,我看到ArrayList
和List
。 List
实际上是LinkedList
吗?例如
val list = listof("1st", "2nd")
答案 0 :(得分:6)
如果使用listOf
,您将获得List
的某种实现,它具有只读的List
接口,其中包含您作为参数提供的元素。通过使用此功能,意味着您不关心它的实现方式。 实际上,如果您使用的是JVM,这可能仍然是正如@Zabuza在此处的注释中指出的那样,它实际上是由{{1}支持的},这是一个稍微不同的类。java.util.ArrayList
。
如果您再次使用mutableListOf
,则只是在说您想要某物包含实现MutableList
的元素,但是实现取决于标准库。再次,这目前得到Arrays.ArrayList
的支持,但这是一个实现细节。
如果需要,有几个函数可以显式返回更特定的类型。有arrayListOf
,sortedSetOf
,linkedMapOf
,还有更多-碰巧没有ArrayList
,但是如果您需要一个{不想使用linkedListOf
构造函数。
更通用的LinkedList
和listOf
是可取的,如果有更改,您以后将在平台之间共享代码-这些是标准库的一部分,它们可以返回{{1} },但如果您编译为JavaScript或本机,则使用不同的平台特定实现。
答案 1 :(得分:4)
它既不是LinkedList
也不是ArrayList
。基于source code:
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
接口(即,它是不可变的)。
答案 2 :(得分:1)
kotlin中的列表不是LinkedList
根据官方文档-Kotlin List类型是一种 提供只读操作(如大小,获取等)的接口。 像在Java中一样,它从Collection继承,而后者又继承 来自Iterable。
listOf()是标准Kotlin库中用于创建不可变列表的方法。 listOf()方法是使用Kotlin中的数组列表实现的。
请遵循official document link以获取更多详细信息。
答案 3 :(得分:0)
只需尝试打印类型,
val list = listOf("a")
println(list.javaClass)
输出:类java.util.Collections $ SingletonList
val list = listOf("a", "b", "c")
println(list.javaClass)
输出:类java.util.Arrays $ ArrayList
答案 4 :(得分:0)
如果您跟踪源代码
Collections.kt
{% for row in c %}
<div id="table-collapsed" class="collapse" aria-labelledby="heading-collapsed">
<table class="card-body table-sm table table-hover text-right">
<tbody>
<tr>
<td>name</td>
<td>{{ row.1 }}</td>
</tr>
<tr>
<td>dob</td>
<td>{{ row.2 }}</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
然后 _Arrays.kt
/**
* Returns a new read-only list of given elements. The returned list is serializable (JVM).
* @sample samples.collections.Collections.Lists.readOnlyList
*/
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()
然后,您会发现它是被Kotlin的List接口包裹的Kotlin的数组,我们将其称为“ Kotlin的数组列表”
“ Kotlin的数组列表”可能与Java的数组相同或不相同-我猜它是在Java(JVM)或Android环境(Dalvik或ART)中