Любое приложение работает с наборами данных: списки задач, контакты, сообщения. И чаще всего эти данные нужно не только хранить, но и менять: добавлять новые элементы, удалять ненужные, переставлять местами. Для этого в 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-разработчика. Начните применять её в своих проектах уже сегодня — например, замените несколько отдельных переменных одним списком, и код станет проще и понятнее.