Нет смысла проходить каждую запись и спрашивать индексатора, к какому разделу принадлежит эта запись.В вашем случае индексатор может выполнять 6000 бинарных поисков.Затем поместите этот результат в карту, которая будет иметь менее 30 записей и выполнит много перезаписей.
Также не стоит злоупотреблять картой sectionToPosition для создания начального положения раздела.Вы либо готовите таблицу со статистикой, которая будет лучшим способом обработки такого большого количества данных.
B.Вы можете использовать базу данных, чтобы подсчитать количество записей для каждого раздела и создать свой собственный раздел, начиная с карты.
SELECT UPPER(SUBSTR(LTRIM(side_a), 1, 1)), COUNT(*) FROM cards GROUP BY 1 ORDER BY 1 ASC;