Помимо относительно жестких структур данных, таких как массивы, Kotlin также использует другие, гораздо более гибкие конструкции данных — так называемые Коллекции. Коллекции Kotlin — это общие структуры данных, используемые для хранения и управления группой объектов одного типа. Они предлагают множество методов и функций для доступа, манипулирования, добавления или удаления сохраненных элементов.
Коллекции — это не особенность или изобретение Kotlin, а фундаментальная концепция многих языков программирования. Java предоставляет API коллекций, который состоит из множества интерфейсов и классов для поддержки различных типов коллекций. Kotlin развивает и расширяет API коллекций Java, чтобы сделать работу с коллекциями проще и безопаснее.
Основные типы коллекций в Котлине включают в себя Список, Поставьте и Карта.
Список
Список: Список представляет собой упорядоченный набор элементов. Он может содержать повторяющиеся элементы, и их порядок сохраняется. В Котлине список представлен интерфейсом Список представлено. Список можно создать с помощью функции Список() быть созданным. Например:
Случаи использования: Списки используются, когда важен порядок элементов и разрешены дубликаты. Например, хранение элементов в том порядке, в котором они встречаются (например, список пользователей, которые подписались на рассылку новостей).
Поставьте
Поставьте: Набор — это коллекция уникальных предметов. Он не содержит дубликатов, и порядок элементов не гарантируется. В Котлине набор определяется интерфейсом Поставьте представлено. Набор может с функцией набор из() быть созданным. Например:
Случаи использования: Наборы используются, когда дублирование недопустимо и расположение элементов не важно. Например, может использоваться коллекция уникальных элементов, таких как список имен пользователей или адресов электронной почты. Наборы полезны для быстрой проверки членства, например определения того, включен ли элемент в группу.
Карта
Карта: Карта представляет собой набор пар ключ-значение. Каждый ключ уникален и связан со значением. В Котлине карта определяется интерфейсом Карта представлено. Карту можно создать с помощью функции карта() быть созданным. Например:
Случаи использования: Карты используются, когда элементы расположены в виде пар ключ-значение и каждый ключ уникален. Примером этого является хранение информации о пользователе, где имя пользователя или адрес электронной почты действуют как ключ, а связанные с ним данные пользователя сохраняются как значения. Карты эффективны для быстрого поиска, например поиска значения с использованием уникального ключа.
Неизменяемые (только для чтения) и изменяемые коллекции.
Котлин различает неизменяемые (неизменный или также только для чтения вызывается) и переменная (изменчивый) Коллекции. Неизменяемые коллекции нельзя изменить после их создания, тогда как изменяемые коллекции предоставляют методы для добавления, удаления и изменения элементов. Образно говоря, вы можете думать об этом так: Неизменяемые коллекции подобны печатным книгам — их нельзя изменить после того, как они были созданы. Изменяемые коллекции, с другой стороны, похожи на блокноты, в которых мы можем добавлять, изменять или удалять элементы.
К неизменяемые коллекции включить упомянутые выше Список, Поставьте и Карта.
Умереть изменяемые коллекции могут быть изменены после их создания. Интерфейсы Изменяемый список, Мутабельный набор и Мутабельная карта расширить соответствующие базовые интерфейсы и добавить методы для добавления, удаления и изменения элементов.
Изменяемый список
Изменяемый список используется в Котлине для представления динамического изменяемого списка элементов, где важен порядок элементов. Функция используется для создания изменяемой коллекции MutableList. изменяемыйСписок() использовал. В приведенном ниже примере создается изменяемый список, а затем модифицируется его с помощью стандартных функций.
Пример использования: Сбор и обработка данных из различных источников, которые затем необходимо дополнительно обработать или проанализировать, например. Например, при чтении данных из файла или базы данных, обработке ответов API или манипулировании данными для статистического анализа.
Мутабельный набор
Мутабельный набор используется в Котлине для представления изменяемой коллекции уникальных элементов, где дубликаты нежелательны. Для создания MutableSet используется функция mutableSetOf().
Пример применения: Управление связями между объектами или элементами в приложении, например сохранение взаимодействий «Нравится» в приложении социальной сети, где каждый пользователь может нажать «Нравится» только один раз.
Мутабельная карта
Изменяемый список используется для хранения пар ключ-значение, где каждый ключ уникален, а значения необходимо изменять, добавлять или удалять.
Пример применения: MutableMaps хорошо подходят для ситуаций, когда требуется быстрый доступ к значениям на основе уникальных ключей. Примеры включают хранение информации о пользователе, где имя пользователя или идентификатор пользователя является ключом, а связанные пользовательские данные — значением, или хранение параметров конфигурации в приложении, где имена параметров являются ключами, а значения параметров — связанными значениями.
Помимо уже упомянутых функций, коллекции Kotlin предлагают ряд других методов преобразований, фильтрации, сортировки и группировки, например: карта, фильтр, группа по, отсортировано по и многие другие. Эти функции упрощают работу с коллекциями и делают код более простым и выразительным. Функции будут подробно рассмотрены позже.
Иерархия коллекций
Умереть Иерархия коллекций описывает, как классы коллекций и интерфейсы организованы в иерархическую структуру. Такое расположение включает в себя различные интерфейсы, которые предоставляют как общие, так и специальные функции для разных типов коллекций. Таким образом, можно использовать и расширять различные типы коллекций последовательным и хорошо структурированным образом.
В следующей таблице представлен обзор наиболее важных интерфейсов в иерархии коллекций и их взаимосвязей друг с другом. Каждый интерфейс представляет определенный тип коллекции, а дочерние интерфейсы расширяют возможности своих родительских интерфейсов, обеспечивая дополнительную функциональность или изменчивость.
Интерфейс | Описание | Подчиненные интерфейсы | Примеры |
---|---|---|---|
Транспортировка | Это основной интерфейс для всех типов коллекций. Он предлагает базовые функции, такие как размер(), isEmpty(), содержит()и т. д. Все остальные интерфейсы сбора расширяют этот интерфейс. | Хитрость, Набор | ArrayList, HashSet, LinkedList |
Список | Упорядоченный тип коллекции, который допускает дубликаты и обеспечивает доступ к элементам через индекс. Список расширяет интерфейс коллекции. | Изменяемый список | МассивСписок, СвязанныйСписок |
Изменяемый список | Упорядоченная коллекция, допускающая дублирование и изменяемая. | – | МассивСписок, СвязанныйСписок |
Поставьте | Неупорядоченная коллекция, не допускающая дубликатов | Мутабельный набор | Хэшсет, LinkedHashSet |
Мутабельный набор | Неупорядоченная коллекция, не допускающая дублирования и изменяемая. | – | Хэшсет, LinkedHashSet |
Карта | Тип коллекции, который упорядочивает элементы в пары ключ-значение. Карта не является прямым субинтерфейсом Коллекции, а образует отдельную иерархию, но тесно связана с иерархией Коллекции. | Мутабельная карта | ХэшМап, LinkedHashMap |
Мутабельная карта | Коллекция пар ключ-значение, которая является изменяемой | – | ХэшМап, LinkedHashMap |
Карта.Вход | Пара ключ-значение на карте | – | – |
Различия и сходства между массивами и коллекциями
Массивы и коллекции имеют несколько различий и сходств в функциональности, использовании и производительности. Ниже приведены некоторые ключевые различия между массивами и типами коллекций List, Set и Map в Kotlin:
Размер и возможность изменения:
- Массивы имеют фиксированный размер, который задается при создании и не изменяется. Вы можете изменять элементы внутри массива, но вы можете изменять и его размер.
- Коллекции могут иметь различное поведение при изменении размера в зависимости от того, доступны ли они только для чтения или изменяемы. Изменяемые коллекции (например, MutableList, MutableSet, MutableMap) могут увеличиваться или уменьшаться, тогда как коллекции только для чтения (List, Set, Map) не могут изменять размер после создания.
Иерархия типов:
- Массивы не являются участниками иерархии коллекций и не реализуют интерфейсы коллекций List, Set или Map.
- List, Set и Map являются частью иерархии коллекций и реализуют интерфейсы коллекций в Kotlin.
Хранение вещей:
- Массивы хранят элементы в непрерывной области памяти и обеспечивают быстрый прямой доступ к элементам через их индекс.
- Коллекции не могут хранить элементы в области непрерывного хранения, в зависимости от их внутренней реализации. Производительность доступа и манипуляций может варьироваться в зависимости от типа коллекции.
Уникальность и порядок элементов:
- Массивы могут содержать повторяющиеся элементы, при этом порядок элементов сохраняется.
- Списки похожи на массивы в том смысле, что они содержат повторяющиеся элементы и порядок элементов сохраняется.
- Наборы не содержат дубликатов, и порядок элементов не гарантируется (если только это не LinkedHashSet, который сохраняет порядок вставки).
- Карты хранят пары ключ-значение, где каждый ключ уникален и связан со значением. Порядок ключей не гарантируется (если только LinkedHashMap не сохраняет порядок вставки).
Обобщения и безопасность типов:
- Массивы имеют более высокий уровень безопасности типов, поскольку при их создании требуется элемент определенного типа.
- Коллекции также обеспечивают безопасность типов посредством обобщений, хотя во время выполнения они могут быть немного слабее, чем массивы, из-за стирания типа.
Функции и методы:
- Массивы и коллекции предоставляют некоторые общие функции и методы, такие как forEach(), filter(), map() и т. д. Однако коллекции предоставляют дополнительные функции и методы, которые делают работу с ними более простой и выразительной.
В целом, массивы и коллекции предлагают разные способы управления группами элементов в Котлине. Массивы подходят для сценариев, где требуется фиксированный размер и высокая производительность. С другой стороны, коллекции предлагают большую гибкость и функции, упрощающие работу с группами элементов.