Collection
30.04.2024 | https://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. Вопросы на собесе
- Что такое ArrayMap и в каких случаях его использование предпочтительнее, чем стандартный HashMap?
- Как работает SparseArray, и почему он используется вместо стандартного HashMap?
- Что такое ArraySet и как оно отличается от HashSet?
- В каких случаях использование ObjectFloatMap или ObjectIntMap может быть предпочтительным по сравнению с использованием HashMap?