- Основы работы с List
- Создание списков
- Добавление и удаление элементов
- Доступ к элементам
- Поиск элементов
- Сортировка
- Обращение порядка элементов
- Итерация по элементам
- Исключения и обработка ошибок
- Создание и инициализация списков
- Основные операции: добавление, удаление, поиск
- Добавление элементов
- Удаление элементов
- Поиск элементов
- Работа с исключениями
- Дополнительные операции
- Продвинутые техники использования List
- Изменяемые коллекции и работа с ними
- Работа с индексами и значениями
- Порядок элементов
- Работа с уникальными значениями
- Изменение элементов на основе условий
- Итерация и выполнение операций над элементами
- Обработка исключений
- Неизменяемые и изменяемые списки
- Фильтрация и трансформация данных
- Фильтрация коллекций
- Трансформация данных
- Пример работы с изменяемыми списками
- Сортировка и перестановка элементов
- Использование уникальных элементов
- Заключение
- Видео:
- Учим Kotlin с нуля | №24 Коллекции. list.
Основы работы с List
Списки могут быть неизменяемыми и изменяемыми. Изменяемые списки позволяют добавлять и удалять элементы после их создания, в то время как неизменяемые остаются фиксированными.
Создание списков
- Для создания неизменяемого набора данных используйте функцию
listOf(). Например:val names = listOf("Наташа", "Кейт"). - Для изменяемого списка применяется
mutableListOf():val cats = mutableListOf("Мурка", "Барсик"). - Существует также функция
emptyList(), которая создает пустой список:val empty = emptyList.()
Добавление и удаление элементов
- Чтобы добавить элемент в изменяемый список, используйте метод
add():cats.add("Милка"). - Удаление элемента производится через метод
remove():cats.remove("Барсик").
Доступ к элементам
- Элементы в списках доступны по их индексам, которые начинаются с нуля. Например:
val firstCat = cats[0]. - Для безопасного доступа к элементам можно использовать функцию
getOrNull(), которая вернетnull, если индекс не существует:val cat = cats.getOrNull(2).
Поиск элементов
- Функция
indexOf()возвращает индекс первого найденного элемента или-1, если элемент не найден:val index = names.indexOf("Кейт"). - Для двоичного поиска используется метод
binarySearch():val index = names.binarySearch("Наташа"). Обратите внимание, что список должен быть отсортирован.
Сортировка
- Метод
sortedDescending()сортирует список в обратном порядке:val sortedNames = names.sortedDescending(). - Для сортировки по определенному критерию можно использовать
sortBy():cats.sortBy { it.length }.
Обращение порядка элементов
Иногда необходимо изменить порядок элементов в наборе. Для этого используются следующие методы:
reversed()возвращает новую версию списка с обратным порядком элементов:val reversedNames = names.reversed().- Функция
asReversed()предоставляет изменяемый вид списка с обратным порядком:val reversedCats = cats.asReversed().
Итерация по элементам

Существует несколько способов перебора элементов в списках:
- С помощью цикла
for:for (cat in cats) { println(cat) }. - С использованием функции
forEach():cats.forEach { println(it) }.
Исключения и обработка ошибок
При работе со списками могут возникать различные исключения, например, при доступе к несуществующему индексу. Зная об этих исключениях и правильно их обрабатывая, вы можете сделать ваше приложение более устойчивым:
IndexOutOfBoundsExceptionвыбрасывается, если укажете неверный индекс.- Функция
try-catchпозволяет обрабатывать исключения:try { val cat = cats[10] } catch (e: IndexOutOfBoundsException) { println("Индекс вне границ списка") }.
Теперь вы имеете общее представление о работе с коллекциями данных. Практикуйтесь, используя разные методы и функции, чтобы лучше понять их возможности и удобство в различных сценариях.
Создание и инициализация списков
Существует несколько способов создания списков. Рассмотрим наиболее распространённые из них:
- Использование
listOfдля создания неизменяемых коллекций. - Применение
mutableListOfдля создания изменяемых коллекций. - Создание пустых коллекций с помощью
emptyList.
Начнем с простейшего примера. Допустим, вы хотите создать неизменяемую коллекцию с элементами «милка», «пушистика» и «рыжик». Вы можете сделать это следующим образом:
val firstList = listOf("милка", "пушистика", "рыжик") Если вам нужно создать изменяемую коллекцию, используйте mutableListOf. Например, коллекция, которая может изменяться, может быть создана так:
val mutableList2 = mutableListOf("милка", "пушистика", "рыжик") Иногда необходимо создать пустую коллекцию, чтобы затем добавлять в нее элементы. Для этого подходит emptyList:
val emptyList = emptyList() При работе с коллекциями часто требуется доступ к элементам по их позициям. Например, чтобы получить элемент по индексу, используйте elementAt:
val element = firstList.elementAt(1) // Возвращает "пушистика" Чтобы найти индекс элемента, можно воспользоваться indexOf:
val index = firstList.indexOf("пушистика") // Возвращает 1 Для сортировки элементов коллекции в обратном порядке используйте sortedDescending:
val sortedList = firstList.sortedDescending() Иногда возникает необходимость поиска первого не нулевого элемента в коллекции. Это можно сделать с помощью функции firstNotNullOf:
val firstNonNull = firstList.firstNotNullOf { it } Вы также можете упорядочить элементы с помощью различных функций сортировки. Например, сортировка по алфавитному порядку:
val sortedByAlphabet = firstList.sortedBy { it } Или использование произвольного порядка:
val sortedByCustomOrder = firstList.sortedWith(compareBy { it.length }.thenBy { it }) При необходимости вставить элемент в определенную позицию в изменяемом списке, используйте add:
mutableList2.add(1, "kate") Для удаления элемента по его значению или индексу можно использовать функции remove и removeAt:
mutableList2.remove("рыжик")
mutableList2.removeAt(0) Вот так можно эффективно создавать и инициализировать коллекции, используя различные методы и функции, которые помогут вам управлять данными с наибольшей гибкостью и удобством.
Основные операции: добавление, удаление, поиск
Добавление элементов
Чтобы добавить элемент в список, можно использовать различные методы. Рассмотрим пример:
val numbers = mutableListOf(1, 2, 3)
numbers.add(4)
numbers.add(0, 0) // Вставка в начало списка
В данном случае создается список numbers, в который добавляются новые элементы с помощью метода add. Можно указать индекс, чтобы вставить элемент в определенное место.
Удаление элементов
Удаление элементов также является важной операцией. Пример удаления элемента:
val names = mutableListOf("Alice", "Bob", "Kate")
names.remove("Bob")
names.removeAt(1) // Удаление элемента по индексу
Сначала создаем список names, затем удаляем элемент по значению или индексу с помощью методов remove и removeAt.
Поиск элементов
Для поиска элементов в списках можно использовать различные функции:
val listOfБарсик = listOf("Барсик", "Мурка", "Кот")
val index = listOfБарсик.indexOf("Мурка")
val lastIndex = listOfБарсик.lastIndexOf("Кот")
val containsБарсик = listOfБарсик.contains("Барсик")
Здесь создается список listOfБарсик, в котором выполняется поиск элемента с помощью методов indexOf, lastIndexOf и contains. Эти методы возвращают индекс первого и последнего вхождения элемента или проверяют наличие элемента в списке.
Работа с исключениями
При работе со списками важно учитывать возможность возникновения исключений. Например, попытка доступа к несуществующему элементу может привести к ошибке:
val numbers = listOf(1, 2, 3)
try {
val value = numbers[5]
} catch (e: IndexOutOfBoundsException) {
println("Элемент с заданным индексом не существует")
}
В этом случае используется блок try-catch для обработки исключения IndexOutOfBoundsException, чтобы избежать падения программы.
Дополнительные операции
Помимо основных операций, есть и дополнительные, которые помогают упростить работу с коллекциями:
| Операция | Описание | Пример |
|---|---|---|
| sortBy | Сортировка элементов по заданному критерию | numbers.sortBy { it } |
| getOrElse | Возвращает элемент по индексу или заданное значение, если индекс выходит за границы списка | val value = numbers.getOrElse(5) { -1 } |
| random | Возвращает случайный элемент из списка | val randomElement = numbers.random() |
Эти функции позволяют выполнять операции поиска, сортировки и доступа к элементам более гибко и эффективно, что упрощает работу с коллекциями в программировании.
Продвинутые техники использования List
Изменяемые коллекции и работа с ними
Одной из особенностей языка Kotlin является наличие изменяемых коллекций. С их помощью можно добавлять, удалять и изменять элементы, что делает их очень удобными для динамической работы с данными.
- Создание изменяемого списка:
val numbers: MutableList= mutableListOf(1, 1, 5) - Добавление элементов:
numbers.add(11) - Фильтрация значений:
val filteredNumbers = numbers.filter { it > 1 }
Работа с индексами и значениями
Для более точного доступа к элементам можно использовать индексы. Например, чтобы получить элемент на определённой позиции или выполнить замену.
- Получение элемента по индексу:
val element = numbers.elementAt(2) - Замена элемента:
numbers[1] = 7
Порядок элементов
Иногда требуется изменить порядок элементов в коллекции. В Kotlin для этого предусмотрены различные функции сортировки и перестановки.
- Сортировка в порядке возрастания:
numbers.sort() - Перестановка элементов:
numbers.reverse()
Работа с уникальными значениями
В некоторых случаях важно, чтобы коллекция не содержала повторяющихся значений. Kotlin предоставляет удобные методы для работы с такими ситуациями.
- Получение уникальных элементов:
val uniqueNumbers = numbers.distinct() - Использование критерия для уникальности:
val cats = listOf("Барсик", "Мурка", "Барсик") val distinctCats = cats.distinctBy { it }
Изменение элементов на основе условий
С помощью функций можно изменять элементы коллекции, основываясь на различных условиях. Это позволяет автоматизировать обработку данных и уменьшить количество ручных операций.
- Пример использования:
val stringList = listOf("a", "b", "c") val modifiedList = stringList.map { it.toUpperCase() }
Итерация и выполнение операций над элементами
Для выполнения операций над каждым элементом коллекции часто используются функции итерации.
- Использование forEach:
val myLovelyCats = listOf("Рыжик", "Милка") myLovelyCats.forEach { println(it) }
Обработка исключений
При работе с коллекциями нередко возникают ситуации, когда доступ к элементам выходит за границы допустимых значений. Для таких случаев в Kotlin существуют специальные механизмы обработки исключений.
- Пример обработки:
try { val value = numbers[10] } catch (e: IndexOutOfBoundsException) { println("Индекс вне диапазона") }
Эти продвинутые техники позволяют значительно расширить возможности работы с коллекциями и упрощают обработку данных в Kotlin. Пользуйтесь ими, чтобы писать более эффективный и чистый код.
Неизменяемые и изменяемые списки
Когда мы работаем с коллекциями данных, часто возникает необходимость выбора между неизменяемыми и изменяемыми списками. Каждый из этих типов имеет свои особенности и подходит для различных задач. В данном разделе рассмотрим их основные отличия и примеры использования.
Неизменяемые списки удобнее использовать, когда требуется создать коллекцию, элементы которой не должны изменяться после инициализации. Они позволяют избежать неожиданных изменений и упрощают понимание кода. Для создания такого списка применяется функция listOf, например:
val firstList = listOf("kitten", "пушистика", "productval") В отличие от неизменяемых, изменяемые списки позволяют добавлять, удалять и изменять элементы после их создания. Это делает их более гибкими и удобными в случае, когда данные должны изменяться во времени. Создаются они с помощью функции mutableListOf:
val secondList = mutableListOf("милка", "чисел", "дубликаты") Ниже приведена таблица, в которой представлены основные функции и операции, применяемые к неизменяемым и изменяемым спискам:
| Операция | Неизменяемый список | Изменяемый список |
|---|---|---|
| Добавление элемента | Не поддерживается | add(element) |
| Удаление элемента | Не поддерживается | remove(element) |
| Изменение элемента | Не поддерживается | set(index, element) |
| Получение элемента по индексу | get(index) | get(index) |
| Поиск элемента | indexOf(element) | indexOf(element) |
| Сортировка списка | sorted() | sort() |
Таким образом, зная особенности неизменяемых и изменяемых списков, можно выбирать наиболее подходящий способ работы с данными в зависимости от поставленных задач и условий. Например, для сортировки списка строк в порядке убывания используется функция sortedDescending:
val sortedList = firstList.sortedDescending() В изменяемом списке можно добавлять элементы на заданную позицию с помощью функции add(position, element), что делает их особенно полезными в случаях, когда необходимо динамически управлять коллекцией данных:
secondList.add(1, "новым") Также доступны функции для работы с дубликатами, бинарного поиска и упорядочивания списков по нескольким критериям, что позволяет создавать гибкие и мощные решения для обработки данных.
Фильтрация и трансформация данных
Фильтрация коллекций
Фильтрация позволяет выбрать элементы, соответствующие определённым критериям. Например, у нас есть список строк stringList, из которого нужно выделить только те, что содержат слово «Барсик»:
val stringList = listOf("Барсик", "Рыжик", "Барсик", "Катя")
val filteredList = stringList.filter { it.contains("Барсик") }
Результат будет таким: listOf(«Барсик», «Барсик»). Метод filter возвращает новый список, содержащий элементы, которые удовлетворяют указанному условию.
Трансформация данных
Трансформация позволяет изменить элементы коллекции в соответствии с заданной функцией. Например, мы можем преобразовать список имен кошек mylovelycats, добавив к каждому имени постфикс » the Cat»:
val mylovelycats = listOf("Барсик", "Рыжик", "Катя")
val transformedCats = mylovelycats.map { "$it the Cat" }
Результат будет следующим: listOf(«Барсик the Cat», «Рыжик the Cat», «Катя the Cat»). Метод map применяет указанную функцию к каждому элементу списка и возвращает новый список с изменёнными значениями.
Пример работы с изменяемыми списками
Рассмотрим работу с mutableListOf. Создадим изменяемый список mutablelist2 и добавим в него новый элемент:
val mutablelist2 = mutableListOf("Барсик", "Рыжик")
mutablelist2.add("Катя")
Теперь список будет содержать три элемента: mutablelist2 = mutableListOf(«Барсик», «Рыжик», «Катя»). Изменяемые списки удобнее в тех случаях, когда нужно динамически изменять их содержимое.
Сортировка и перестановка элементов

Для изменения порядка элементов в списке можно использовать функции sortBy и reverse. Например, отсортируем список по алфавиту и затем развернём его:
val cats = mutableListOf("Барсик", "Рыжик", "Катя")
cats.sortBy { it }
cats.reverse()
Сначала список будет отсортирован: listOf(«Барсик», «Катя», «Рыжик»), а затем перевернут: listOf(«Рыжик», «Катя», «Барсик»). Методы sortBy и reverse работают непосредственно с изменяемым списком, изменяя его порядок.
Использование уникальных элементов
Если требуется оставить в коллекции только уникальные элементы, можно использовать функцию distinctBy. Например, чтобы оставить уникальные имена кошек:
val catsWithDuplicates = listOf("Барсик", "Рыжик", "Барсик")
val uniqueCats = catsWithDuplicates.distinctBy { it }
Результатом будет: listOf(«Барсик», «Рыжик»). Функция distinctBy удаляет дубликаты, оставляя только уникальные элементы.
Заключение
Работа с коллекциями включает множество полезных методов для фильтрации и трансформации данных. Использование таких функций, как filter, map, sortBy, reverse, и distinctBy, позволяет эффективно обрабатывать любые наборы данных, обеспечивая гибкость и удобство в разработке. Эти методы должны быть в арсенале каждого разработчика, работающего с коллекциями.








