Является ли Список в Kotlin LinkedList? - PullRequest
0 голосов
/ 26 июня 2018

Наиболее популярными списками в Java являются ArrayList и LinkedList.

В Котлине я вижу ArrayList и List. List на самом деле LinkedList? Например

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

Ответы [ 4 ]

0 голосов
/ 26 июня 2018

Только что попытался напечатать тип,

* для одного элемента это 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

0 голосов
/ 26 июня 2018

Список в котлине не является LinkedList

Согласно официальным документам, тип Kotlin List является интерфейс, который обеспечивает операции только для чтения, такие как size, get и так далее. Как и в Java, он наследует от Collection и, в свою очередь, наследует от Iterable.

listOf () - это методы из стандартной библиотеки Kotlin для создания неизменяемого списка . Метод listOf () реализован с использованием списка массивов в kotlin.

Следуйте по этой официальной ссылке на документ для получения более подробной информации.

0 голосов
/ 26 июня 2018

Если вы используете listOf, вы получите какую-то реализацию List с интерфейсом List только для чтения, содержащим элементы, которые вы предоставляются в качестве аргументов. Используя эту функцию, вы подразумеваете, что вас не волнует, как она реализована. На самом деле, это, вероятно, все еще будет java.util.ArrayList под капотом, если вы используете JVM. Как отметил @Zabuza в комментариях здесь, на самом деле он поддерживается Arrays.ArrayList, который является немного другой класс.

Если вы используете mutableListOf, опять же, вы просто говорите, что хотите что-то , содержащее ваши элементы, которые реализуют MutableList, но реализацию до стандартной библиотеки. Опять же, это в настоящее время поддерживается ArrayList, но это деталь реализации.

Есть пара функций, которые явно возвращают более конкретный тип, если они вам нужны. Есть arrayListOf, sortedSetOf, linkedMapOf и еще пара - не бывает linkedListOf, но вы Возможно, вы могли бы реализовать его самостоятельно, если он вам нужен и не хотите использовать конструктор LinkedList.

Более общие listOf и mutableListOf предпочтительнее, если есть изменения, которыми вы будете делиться своим кодом между платформами позже - поскольку они являются частью стандартной библиотеки, они могут возвращать ArrayList в JVM, но различные реализации для конкретной платформы, если вы компилируете в JavaScript или Native.

0 голосов
/ 26 июня 2018

Это ни 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 (т.е. он неизменен).

...