Большое количество однотипных записей загружается в некоторый контейнер. После чего выполняется небольшая серия удалений и вставок записей по ссылке на следующий\предыдущий элемент, а так же запросы к порядковым индексам данных по прямой ссылке. После чего данные выгружаются обратно. Создайте класс контейнера, оптимизированного для работы в описанном режиме.
Создать связный список Array, так как неизвестно какое количество элементов будет использовано. Следовательно, чтобы не допустить ситуации когда не хватит выделенного места, будем добавлять его "налету". Однако, есть момент с операциями по индексам. В случае большого индекса, придется пробегать весь список до требуемого элемента. Сложность O(n). С целью оптимизации, можно завернуть весь список в еще один связный список, обозначенный Chunk. Грубо говоря, мы режем порционно Array и складываем в Chunk.
Было: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
Стало: {1 - 2 - 3} {4 - 5 - 6} {7 - 8 - 9}
Таким образом, можно добавлять и удалять записи, практически бесконечно. Кроме того, это будет довольно быстро, если подобрать оптимальный размер одного Chunk. Сложность будет O(n/k), где k - размер Chunk.
Более того, можно сделать универсальный механизм оптимизации, и в случае необходимости оборачивать некоторый список еще одним слоем Chunk. Таким образом сложность может сократиться до O(n/k1/k2/...)