Я не слишком беспокоюсь о эффективности времени (операция будет редка), а скорее об эффективности памяти: Могу ли я увеличить массив без временного использования всех значений в два раза?
Есть ли более эффективный способ выращивания большого массива, чем создание нового и копирование по всем значениям? Как, соединяя его с новым?
Как насчет того, что массивы фиксированного размера хранятся в другом массиве и перераспределяют/копируют этот верхний уровень? Оставит ли это фактические значения на месте?
Мне известно о ArrayList, но мне нужно много контролировать доступ к массиву, и доступ должен быть очень быстрым. Например, я предпочитаю a[i]
al.get(i)
.
Основная причина, по которой я забочусь об этом, состоит в том, что массив, о котором идет речь (или несколько таких массивов), может очень хорошо занять достаточно большую часть основной памяти, что обычная стратегия создания копии с двойным размером перед отбрасыванием оригинала может не сработать. Это может означать, что мне нужно пересмотреть общую стратегию (или мои рекомендации по оборудованию).