Какие коллекции C# лучше всего оптимизированы как для вставки нулевого индекса, так и для добавления к концу?Коллекция C#, оптимизированная для вставки индекса 0?
Я думаю, что простой - LinkedList
, но, учитывая мой интерес, в больших байт-буферах, я подозреваю, что стоимость памяти за узел может быть непомерно дорогостоящей для моих нужд.
Я понимаю, что нормальный List
имеет буферную поддержку с емкостью, обычно большей, чем фактические данные. Когда данные заполняют буфер, создается новый буфер, а содержимое старого переносится на новый. Это отлично подходит для добавления к концу, но ужасно для роста в начале. Мои тесты, добавление/вставка миллион случайных целых чисел в List
:
- Список Append время 0.014sec.
- Список Нулевой Вставить время 173.343sec
Очередь встает на один конец и удаляется с другого конца. Deque имеет вставку и удаление с обоих концов. В стандартной библиотеке нет Deque, но реализовать ее не так сложно. (Java имеет эквивалентный ArrayDeque) –
ahh ok, не знал об этом. Я предполагаю, что в deque данные находятся в середине буфера емкости. –
Deque работает так же, как и в очереди, как и для обоих концов. Данные просто «обертываются». Он может сидеть где угодно. –