Kotlin中的列表是LinkedList吗?

时间:2018-06-26 11:56:31

标签: java arraylist linked-list kotlin

Java中最受欢迎的列表是ArrayListLinkedList

在Kotlin中,我看到ArrayListListList实际上是LinkedList吗?例如

val list = listof("1st", "2nd")

5 个答案:

答案 0 :(得分:6)

如果使用listOf,您将获得List的某种实现,它具有只读的List接口,其中包含您作为参数提供的元素。通过使用此功能,意味着您不关心它的实现方式。 实际上,如果您使用的是JVM,这可能仍然是java.util.ArrayList正如@Zabuza在此处的注释中指出的那样,它实际上是由{{1}支持的},这是一个稍微不同的类。

如果您再次使用mutableListOf,则只是在说您想要某物包含实现MutableList的元素,但是实现取决于标准库。再次,这目前得到Arrays.ArrayList的支持,但这是一个实现细节。

如果需要,有几个函数可以显式返回更特定的类型。有arrayListOfsortedSetOflinkedMapOf,还有更多-碰巧没有ArrayList,但是如果您需要一个{不想使用linkedListOf构造函数。

更通用的LinkedListlistOf是可取的,如果有更改,您以后将在平台之间共享代码-这些是标准库的一部分,它们可以返回{{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中的列表不是L​​inkedList

     

根据官方文档-Kotlin List类型是一种   提供只读操作(如大小,获取等)的接口。   像在Java中一样,它从Collection继承,而后者又继承   来自Iterable。

listOf()是标准Kotlin库中用于创建不可变列表的方法。 listOf()方法是使用Kotlin中的数组列表实现的。

请遵循official document link以获取更多详细信息。

答案 3 :(得分:0)

只需尝试打印类型,

*对于一个元素,它是一个SingletonList

val list = listOf("a")
println(list.javaClass)
  

输出:类java.util.Collections $ SingletonList

*对于一个以上的元素,它是一个ArrayList

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)中