Коллекции (Collections) - это топовая тема. Несмотря на то, что это всего лишь набор классов с набором функций, программисты постоянно валятся на собеседовании по этой теме. И это вполне справедливо, так как коллекции используются в программировании каждый день. Давайте разбираться на практике, что это такое и как это работает.
Коллекции созданы, что-бы облегчить хранение данных в структурированном виде, а также обеспечить простой способ для манипуляции данными. От части, можно считать, что это аналог массивов, но более расширенный и с дополнительными функциями. Например, массиву необходимо заранее задать размер и изменить его нельзя. Коллекции же умеют хранить любое количество данных, столько сколько нужно в конкретный момент, имеют функционал для манипуляции данными и предлагают различные структуры хранения: список (list), множество (set) или словарь (map).
В видео я на практике показываю, как работать с коллекциями в Kotlin. Рекомендую проделать все тоже самое, что-бы теория из статьи хорошо закрепилась.
val list = listOf("one", "two", "three")
// можно только прочитать
val firstElement = list[0]
val mutableList = mutableListOf("one", "two", "three")
// можно прочитать
val firstElement = mutableList[0]
// а еще, можно добавить элемент
mutableList.add("new element")
Если посмотреть на картинку выше, имеем следующее: Есть интерфейс Collection
Отдельно от всей иерархии классов стоит интерфейс Map
Для Всех интерфейсов коллекции, есть аналог с префиксом Mutable. Такие коллекции изменяемые. Их интерфейсы содержат дополнительные методы для добавления, удаления и других манипуляций с уже созданной коллекцией. Например метод add(), есть только в Mutable коллекции.
List, Set и Map - это всего лишь интерфейсы. В реальном же коде нам необходимы классы, в которых реализуются данные интерфейсы. Реализаций очень много: различные способы хранения данных, потоконебезопасные и потокобезопасные и много других. Но, вот основные, которые используются в 99% случаях:
HashSet
По умолчанию все реализации коллекций - неизменяемые (read-only). Но, для каждой из них есть вариант с префиксом Mutable - изменяемый.
Неизменяемые коллекции:
// ArrayList
val list = listOf("dsfsdf", "dsfsdfsdf")
// HashSet
val set = setOf("dsfsdf", "dsfsdfsdf")
// HashMap
val map = mapOf("key" to "value", "new key" to "new value")
Изменяемые коллекции:
// ArrayList
val list = mutableListOf("dsfsdf", "dsfsdfsdf")
// HashSet
val set = mutableSetOf("dsfsdf", "dsfsdfsdf")
// HashMap
val map = mutableMapOf("key" to "value", "new key" to "new value")
Обновлено 02 мая 2021
Теги: