Добавить в корзинуПозвонить
Найти в Дзене
Умный пульс

Преобразование массива в список в Kotlin

1. Обзор В этом руководстве мы рассмотрим, как преобразовать массив (Array) в список (List) в Kotlin. Хотя в теории эти структуры данных значительно различаются по производительности и использованию памяти, на практике разница часто несущественна. Это объясняется тем, что в большинстве случаев при работе со списками мы используем ArrayList. Кроме того, Kotlin поощряет неизменяемость структур данных, предпочитая создавать новые объекты при обновлениях, а не модифицировать существующие — в этом контексте различия между Array и List становятся несущественными. Тем не менее, некоторые функции стандартной библиотеки Kotlin применимы только к наследникам Collection, поэтому полезно знать, как выполнить преобразование.
ArrayList — это обёртка над массивом, реализующая интерфейс List. Самый простой способ обернуть массив в список — использовать функцию asList(): val array = intArrayOf(1, 2, 3, 4)
val list = array.asList()
assertEquals(listOf(1, 2, 3, 4), list) Для объектных массивов эта функ
Оглавление

1. Обзор

В этом руководстве мы рассмотрим, как преобразовать массив (Array) в список (List) в Kotlin. Хотя в теории эти структуры данных значительно различаются по производительности и использованию памяти, на практике разница часто несущественна. Это объясняется тем, что в большинстве случаев при работе со списками мы используем ArrayList. Кроме того, Kotlin поощряет неизменяемость структур данных, предпочитая создавать новые объекты при обновлениях, а не модифицировать существующие — в этом контексте различия между Array и List становятся несущественными.

Тем не менее, некоторые функции стандартной библиотеки Kotlin применимы только к наследникам Collection, поэтому полезно знать, как выполнить преобразование.

2. Преобразование с обёрткой


ArrayList — это обёртка над массивом, реализующая интерфейс List. Самый простой способ обернуть массив в список — использовать функцию asList():

val array = intArrayOf(1, 2, 3, 4)
val list = array.asList()

assertEquals(listOf(1, 2, 3, 4), list)

Для объектных массивов эта функция делегирует выполнение Arrays.asList() из Java.

Для массивов примитивных типов она возвращает объект, реализующий интерфейс AbstractList.

Новый список
связан с исходным массивом, то есть любые изменения в массиве отразятся на списке:

array[0] = 0
assertEquals(listOf(0, 2, 3, 4), list)

Алгоритм выполняется за O(1) по времени и памяти.

3. Преобразование с копированием

Если вы хотите получить независимую копию, а не обёртку, Kotlin предлагает несколько способов:

3.1. Метод Array.toCollection()

Функция-расширение toCollection() добавляет все элементы массива в переданную MutableCollection.

val myList = givenArray.toCollection(ArrayList())
assertThat(myList).isEqualTo(expectedList)

Если нужно добавить элементы в уже существующий список:

val existingList = mutableListOf("I have an element already.")
val appendedList = givenArray.toCollection(existingList)

assertThat(appendedList).isEqualTo(
mutableListOf("I have an element already.", *givenArray)
)

Функция возвращает тот же список, который был передан — он изменяемый.

3.2. Метод Array.toList()

Для получения нового списка можно использовать toList():

val array = intArrayOf(1, 2, 3, 4)
val list = array.toList()

assertEquals(listOf(1, 2, 3, 4), list)

Этот список неизменяемый.

Если нужен изменяемый список, используйте toMutableList():

kval mutable = array.toMutableList()
mutable.add(5)

assertEquals(listOf(1, 2, 3, 4, 5), mutable)

3.3. Использование listOf() с оператором распаковки *

Также можно создать список с помощью listOf и оператора *:

val myList = listOf(*givenArray)
assertThat(myList).isEqualTo(expectedList)

Для изменяемого списка используйте mutableListOf(*array).

3.4. Связь и сложность

Все методы копирования создают независимый список, поэтому изменения в массиве не повлияют на список:

array[0] = 0
assertEquals(listOf(1, 2, 3, 4), list) // список не изменился

Временная и пространственная сложность — O(n), так как каждый элемент копируется.

4. Заключение


Мы рассмотрели способы преобразования массива в List или MutableList в Kotlin.

  • Если вам нужен простой обёрточный List, достаточно asList().
  • Если требуется независимая копия или возможность изменять список, лучше использовать toList(), toMutableList() или toCollection().

Также можно объединить элементы массива с существующей коллекцией, используя toCollection().

Оригинал статьи: https://www.baeldung.com/kotlin/array-to-list