Какую коллекцию выберешь для приходящего потока данных и последующего чтения

«Какую коллекцию выберешь для приходящего потока данных и последующего чтения» — вопрос из категории Алгоритмы и структуры данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для потокобезопасного чтения и записи данных в многопоточной среде лучше всего подойдет ConcurrentHashMap, если нужен доступ по ключу, или CopyOnWriteArrayList, если важен порядок элементов.

ConcurrentHashMap эффективен для частых записей и чтений:

val concurrentMap = ConcurrentHashMap<Key, Value>()
// Потокобезопасные операции
concurrentMap.put(key, value)
val result = concurrentMap[key]

CopyOnWriteArrayList подходит, если данные редко меняются, но часто читаются:

val list = CopyOnWriteArrayList<Data>()
// Добавление безопасно, но создает копию
list.add(data)
// Чтение без блокировок
val item = list[0]

Выбор зависит от сценария: частые изменения — ConcurrentHashMap, редкие изменения и частые чтения — CopyOnWriteArrayList.