Разница между массивами и сетами в Котлине - PullRequest
0 голосов
/ 03 июля 2019

Может кто-нибудь сказать разницу между Set и Array в Kotlin?Какой из них лучше в каких условиях?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Краткий ответ: массив - это индексированная структура данных, содержащая фиксированное количество элементов; Набор - это неупорядоченная структура данных, содержащая элементы без дубликатов. Оба напечатаны.

Длинный ответ:

В основных терминах массив в Kotlin подобен большинству других языков: структура данных, содержащая значения того же типа. Массивы имеют фиксированную длину, упорядочены и доступны случайным образом по индексу (начиная с 0).

Массив отображается непосредственно в массив Java. Это единственная структура данных, которую предоставляет JVM, кроме Object. (Фактически, типы массивов обрабатываются как специальные подтипы Object.) Они типизированы: вы можете иметь массив примитивного типа (например, массив целых чисел) или ссылочного типа (например, массив чисел). Тип доступен во время выполнения и применяется принудительно. Массивы рассматриваются как ковариантные (что может привести к ошибкам во время выполнения).

В Kotlin / JVM Array наследует почти все эти функции (кроме ковариации). Используется только для массивов ссылочных типов; Kotlin предоставляет отдельные классы для массивов примитивов (IntArray & c).

И в основных терминах Set подобен нескольким другим языкам: неупорядоченная структура данных, содержащая элементы одного типа, ни один из которых не равен.

Set - это интерфейс, который является частью платформы Java Collections (которая также включает в себя Collection, List и Map). Значение Set может указывать на любой объект, реализующий этот интерфейс. Это универсальный параметр с одним параметром типа, определяющим, какие значения могут храниться в наборе; это происходит во время компиляции (только).

В Kotlin Set является ковариантным и только для чтения; есть MutableSet подинтерфейс, который добавляет методы мутатора. MutableSet s имеют переменный размер, растут и уменьшаются по мере необходимости.

Существует много различных реализаций интерфейса SetMutableSet) с различными характеристиками производительности: вставка, удаление и проверка на наличие прересурсов могут быть O (1) или O (n) или чем-то промежуточным и использование памяти и параллелизм также различаются.

Set s могут быть повторены, но порядок вообще не указан. (Некоторые реализации могут давать гарантии о том, является ли порядок последовательным, и если да, то / как он относится к значениям и / или как они были добавлены.)

Итак, что вы должны использовать? Если вам нужно предотвратить дублирование, то Set является очевидным выбором. Принимая во внимание, что если вам нужно упорядочить значения, тогда Array будет более подходящим - хотя, поскольку он не является частью структуры коллекций, он не всегда хорошо работает с другими типами коллекций. (Kotlin предоставляет много методов расширения, чтобы попытаться сгладить разрыв, но все еще есть много угловых случаев.) В общем, обычно лучше вместо этого использовать List: это дает вам более точный контроль над изменчивостью, избегая некоторых неловких ситуаций (особенно в отношении параметров типа), не фиксирует длину, дает вам гораздо больше методов расширения и на один символ короче!

0 голосов
/ 03 июля 2019

Set не допускает дублирования элементов там, где позволяют массивы. Это зависит от требований. Если требование состоит в том, чтобы иметь только уникальные значения, то Set - ваш лучший выбор, поскольку любая реализация Set поддерживает только уникальные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...