Работа с MutableList в Kotlin: полный гайд для начинающих

Любое приложение работает с наборами данных: списки задач, контакты, сообщения. И чаще всего эти данные нужно не только хранить, но и менять: добавлять новые элементы, удалять ненужные, переставлять местами. Для этого в Kotlin есть специальный тип списка — MutableList. Он позволяет свободно изменять содержимое после создания. В этой статье я на простых примерах покажу, как создавать изменяемый список, добавлять и удалять элементы, сортировать и перебирать их.


Что такое MutableList и как его создать

MutableList — это список, в который можно добавлять новые элементы и убирать существующие. Обычный List (неизменяемый) такой возможности не даёт. Создать mutablelist kotlin можно несколькими способами, самый удобный — функция mutableListOf().

val shoppingList = mutableListOf("хлеб", "молоко", "яйца")

Если заранее неизвестно, что будет в списке, можно создать пустой и заполнить позже. Но тогда нужно явно указать тип элементов:

val numbers = mutableListOf<Int>()

Добавление элементов

Чтобы положить новый элемент в конец списка, используют метод add(). А если нужно вставить в определённое место — add(index, элемент). Индексы начинаются с нуля.

val fruits = mutableListOf("яблоко", "банан")
fruits.add("апельсин")          // в конец
fruits.add(1, "груша")          // на второе место (индекс 1)
println(fruits)                 // [яблоко, груша, банан, апельсин]

Также можно добавить сразу несколько элементов через addAll(). Например, присоединить другой список:

fruits.addAll(listOf("киви", "манго"))
println(fruits) // [яблоко, груша, банан, апельсин, киви, манго]

Удаление элементов

Убрать элемент из mutablelist kotlin можно по значению или по индексу. Метод remove(элемент) находит первое вхождение заданного объекта и удаляет его. Если объекта нет, ничего не происходит.

val colors = mutableListOf("красный", "зелёный", "синий", "зелёный")
colors.remove("зелёный")        // удалит первый встреченный зелёный
println(colors)                 // [красный, синий, зелёный]

Для удаления по индексу служит removeAt(индекс). Удаление последнего элемента — removeLast(). Можно очистить весь список за одну команду — clear().

colors.removeAt(1)    // удалит "синий"
colors.removeLast()   // удалит "зелёный"
colors.clear()        // список станет пустым

Изменение и замена элементов

Если нужно поменять значение в конкретной позиции, используйте оператор квадратных скобок, как с массивом:

val names = mutableListOf("Анна", "Борис", "Виктор")
names[1] = "Белла"
println(names) // [Анна, Белла, Виктор]

Это самый простой и читаемый способ обновить элемент.


Перебор списка

Чтобы пройтись по всем элементам, можно использовать обычный цикл for или метод forEach.

val animals = mutableListOf("кот", "собака", "хомяк")
for (animal in animals) {
    println(animal)
}

animals.forEach { animal ->
    println(animal.uppercase())
}

Если нужен индекс, можно воспользоваться свойством indices или функцией forEachIndexed:

animals.forEachIndexed { index, animal ->
    println("$index: $animal")
}

Поиск и проверка наличия

Проверить, есть ли элемент в списке, помогают ключевое слово in и метод contains(). Найти позицию элемента — indexOf() (возвращает первый индекс или -1).

val fruits = mutableListOf("яблоко", "груша", "апельсин")
println("груша" in fruits)          // true
println(fruits.contains("киви"))     // false
println(fruits.indexOf("апельсин"))  // 2

Сортировка

MutableList можно отсортировать по алфавиту (или по другому признаку) на месте с помощью метода sort(). Чтобы не менять исходный список, а получить новый, используют sorted().

val letters = mutableListOf("в", "а", "б")
letters.sort()
println(letters) // [а, б, в]

val sortedCopy = letters.sortedDescending()
println(sortedCopy) // [в, б, а]

Сравнение MutableList и List

Свойство List (неизменяемый) MutableList (изменяемый)
Создание listOf(...) mutableListOf(...)
Добавление элемента Невозможно add(...)
Удаление элемента Невозможно remove(...)
Изменение по индексу Нет list[0] = новое значение
Основное назначение Данные, которые не должны меняться после создания Данные, формируемые постепенно в процессе работы программы

Пример: список покупок

Давайте соберём всё вместе. Напишем простой код, который управляет списком покупок: добавляет товары, удаляет купленные и выводит итог.

val shopping = mutableListOf("хлеб", "молоко")
shopping.add("масло")
shopping.addAll(listOf("сыр", "колбаса"))
println("Список: $shopping")

// купили молоко — удаляем
shopping.remove("молоко")
println("После покупки: $shopping")

// проверяем, нужно ли ещё масло
if ("масло" in shopping) {
    println("Масло всё ещё в списке")
}

// сортируем по алфавиту и выводим
shopping.sort()
shopping.forEachIndexed { i, item ->
    println("${i + 1}. $item")
}

Запустите этот код в Kotlin Playground и посмотрите, как легко управлять данными с помощью mutablelist kotlin.


Итоги

Мы разобрали, как создавать и использовать MutableList: добавлять, удалять, изменять и сортировать элементы. Это одна из главных рабочих лошадок в арсенале Kotlin-разработчика. Начните применять её в своих проектах уже сегодня — например, замените несколько отдельных переменных одним списком, и код станет проще и понятнее.