← Назад к вопросам

Как создать изменяемый список в Kotlin?

1.3 Junior🔥 222 комментариев
#Kotlin основы#Коллекции и структуры данных

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Создание изменяемых списков в Kotlin

В Kotlin для работы с изменяемыми коллекциями существует чёткое разделение на изменяемые (mutable) и неизменяемые (immutable) коллекции. Для создания изменяемого списка используются специальные реализации и функции из стандартной библиотеки Kotlin.

Основные способы создания изменяемого списка

1. MutableList с помощью mutableListOf()

Наиболее распространённый способ создания изменяемого списка — использование функции mutableListOf():

// Создание пустого изменяемого списка
val mutableList1: MutableList<String> = mutableListOf()

// Создание изменяемого списка с начальными элементами
val numbers: MutableList<Int> = mutableListOf(1, 2, 3, 4, 5)

// Сокращённая форма (тип выводится автоматически)
val fruits = mutableListOf("Apple", "Banana", "Orange")

2. Конкретные реализации MutableList

Kotlin предоставляет конкретные реализации изменяемых списков:

// ArrayList (наиболее эффективная реализация для большинства случаев)
val arrayList1 = ArrayList<String>()
val arrayList2 = arrayListOf(1, 2, 3)

// LinkedList (используется при частых операциях вставки/удаления в начале/середине)
val linkedList = LinkedList<Int>()

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

val immutableList = listOf(1, 2, 3)
val mutableList = immutableList.toMutableList()

// Или через MutableList конструктор
val mutableList2 = MutableList(5) { index -> index * 2 }

Операции с изменяемыми списками

Изменяемые списки поддерживают все стандартные операции модификации:

val items = mutableListOf("A", "B", "C")

// Добавление элементов
items.add("D")                // в конец
items.add(0, "First")         // по индексу
items.addAll(listOf("E", "F"))// коллекции

// Удаление элементов
items.remove("B")             // по значению
items.removeAt(0)             // по индексу
items.removeAll { it.startsWith("A") } // по условию

// Изменение элементов
items[1] = "Modified"         // оператор индексации
items.set(2, "Changed")       // через метод set

// Очистка списка
items.clear()

Важные особенности и лучшие практики

  1. Предпочитайте mutableListOf() для создания изменяемых списков, так как это обеспечивает лучшую читаемость и совместимость.

  2. Используйте явный тип MutableList при объявлении переменных, чтобы явно указать на возможность изменения коллекции:

// Плохо: неявно, может быть как List, так и MutableList
val items = mutableListOf(1, 2, 3)

// Хорошо: явно указан тип MutableList
val mutableItems: MutableList<Int> = mutableListOf(1, 2, 3)
  1. Изменяемость vs Неизменяемость — один из ключевых принципов Kotlin:

    • Используйте listOf() для неизменяемых списков
    • Используйте mutableListOf() только когда действительно нужно изменять коллекцию
    • Это помогает избежать случайных модификаций и делает код более предсказуемым
  2. Потокобезопасность: MutableList по умолчанию не является потокобезопасным. Для многопоточных сценариев используйте:

import java.util.concurrent.CopyOnWriteArrayList

val threadSafeList = CopyOnWriteArrayList<String>()

Пример использования изменяемого списка

fun main() {
    // Создаём изменяемый список
    val shoppingCart: MutableList<String> = mutableListOf("Milk", "Bread")
    
    // Добавляем товары
    shoppingCart.add("Eggs")
    shoppingCart.addAll(listOf("Butter", "Cheese"))
    
    // Удаляем товар
    shoppingCart.remove("Bread")
    
    // Изменяем товар
    val index = shoppingCart.indexOf("Milk")
    if (index != -1) {
        shoppingCart[index] = "Almond Milk"
    }
    
    // Сортировка
    shoppingCart.sort()
    
    println("Итоговый список покупок: $shoppingCart")
    println("Количество товаров: ${shoppingCart.size}")
    println("Последний товар: ${shoppingCart.lastOrNull()}")
}

Изменяемые списки в Kotlin предоставляют богатый API для манипуляции данными, сохраняя при этом безопасность типов и следуя принципам функционального программирования, когда это уместно.

Как создать изменяемый список в Kotlin? | PrepBro