Collection

https://developer.android.com/reference/androidx/collection/package-summary
https://developer.android.com/reference/androidx/collection/ArrayMap
https://developer.android.com/reference/androidx/collection/ArraySet
https://developer.android.com/reference/androidx/collection/ScatterMap
https://developer.android.com/reference/androidx/collection/ObjectFloatMap
https://developer.android.com/reference/androidx/collection/IntIntPair
https://developer.android.com/reference/androidx/collection/FloatFloatPair
https://developer.android.com/reference/androidx/collection/LongLongPair
30.04.2024https://habr.com/ru/articles/811415/
ArrayMap

Предназначена для более эффективного использования памяти чем традиционный HashMap.

val map: ArrayMap<Int, String> = arrayMapOf(1 to "Tom", 2 to "Sam", 3 to "Bob")
ArraySet

Универсальная структура данных для более эффективного использования памяти чем традиционный HashSet.

val set: ArraySet<String> = arraySetOf("Tom", "Sam", "Bob")
ScatterMap

Эффективнее использует память чем стандартный HashMap. Реализация LinkedHashMap не оптимизирована для памяти поскольку каждая запись вставленная в карту создает новый LinkedHashMapEntry экземпляр (это также верно для базового HashMap класса и его HashMap.Node).

• накладные расходы на каждую запись составляют 1 байт.

• вставка не требует выделения памяти если карте не требуется увеличить внутреннее хранилище.

• итерация не требует выделения.

val scatterMap: MutableScatterMap<Int, String> = mutableScatterMapOf()
scatterMap[0] = "John"
ObjectFloatMap

Реализация Map с ключами Object и значениями Float. Позволяет избежать выделения памяти при операциях.

val objectFloatMap: MutableObjectFloatMap<String> = mutableObjectFloatMapOf()
objectFloatMap.put("key1", 0F)
IntIntPair

Хранит два значения типа Int в виде одного числа Long благодаря простейшей битовой математики: первое число хранится в старших 32 битах Long а второе в младших. Является value-классом.

val intIntPair = IntIntPair(0, 1)
val first = intIntPair.first
val second = intIntPair.second

val (firstInt, secondInt) = IntIntPair(0, 1)
FloatFloatPair

Аналогично IntIntPair хранит два значения типа Float в одном значении типа Long отличие заключается только в дополнительной трансформации числа Float в битовое представление типа Int.

val floatFloatPair = FloatFloatPair(0F, 1F)
val first = floatFloatPair.first
val second = floatFloatPair.second

val (firstFloat, secondFloat) = FloatFloatPair(0F, 1F)
LongLongPair

Простейшая реализация для двух чисел типа Long. Выигрывает перед Pair<Long, Long> в памяти, так как для всех обобщенных типов используются классы обертки, а не примитивные типы.

val longLongPair = LongLongPair(0L, 1L)
val first = longLongPair.first
val second = longLongPair.second

val (firstLong, secondLong) = LongLongPair(0L, 1L)
Android Collection. Вопросы на собесе
  1. Что такое ArrayMap и в каких случаях его использование предпочтительнее, чем стандартный HashMap?
  1. Как работает SparseArray, и почему он используется вместо стандартного HashMap?
  1. Что такое ArraySet и как оно отличается от HashSet?
  1. В каких случаях использование ObjectFloatMap или ObjectIntMap может быть предпочтительным по сравнению с использованием HashMap?