Какие коллекции существуют в программировании
Что проверяют
Вопрос широкий, и интервьюер смотрит, сведёте ли вы его к тому, чем пользуетесь каждый день: коллекциям Kotlin и их устройству на JVM. Следом обычно спрашивают разницу между List и MutableList или между ArrayList и LinkedList.
Как отвечать
Начните с базовых абстракций и сразу покажите, как они выглядят в Kotlin:
- список (
List): упорядоченный, с дублями, доступ по индексу.mutableListOfпод капотом даётArrayList; - множество (
Set): уникальные элементы.mutableSetOfвозвращаетLinkedHashSetи сохраняет порядок вставки, для сортированного набора естьsortedSetOfна основеTreeSet; - словарь (
Map): пары ключ и значение.mutableMapOfэтоLinkedHashMap, ключи сравниваются черезequalsиhashCode; - очередь и стек:
ArrayDeque, который закрывает оба сценария; - массивы:
Array<Int>хранит упакованные объекты, аIntArrayпримитивы, что заметно по памяти; Sequence: ленивая цепочка операций, на больших коллекциях не создаёт промежуточные списки.
Важный момент Kotlin: List это интерфейс только для чтения, а не неизменяемый список. Тот же объект может меняться через ссылку MutableList в другом месте.
Для Android добавьте специфику. SparseArray хранит ключи int без упаковки, а ArrayMap обходится без отдельного объекта на каждую запись, оба есть в android.util и в androidx.collection и экономят память на небольших наборах. В Compose список в состоянии держат в mutableStateListOf, а для стабильных параметров иногда берут ImmutableList из kotlinx.collections.immutable.
Где спотыкаются
Называют Stack из Java стандартным стеком. Этот класс наследует синхронизированный Vector и считается устаревшим, вместо него берут ArrayDeque.
Путают read-only с immutable. Меняют MutableList внутри mutableStateOf и удивляются, что Compose не перерисовал экран: ссылка в состоянии осталась прежней, записи в состояние не было.
Считают деревья и графы коллекциями стандартной библиотеки. В Kotlin и Java готовых типов для них нет, есть только TreeMap и TreeSet на основе дерева, а граф вы собираете сами, обычно списком смежности на Map.