какой класс коллекции эффективен для вставки в C # - PullRequest
0 голосов
/ 08 февраля 2012

Если я хочу вставить данные в эти классы сбора "Словарь", "Список" и "Сортированный список", что потребует меньше времени для выполнения вставки?Вы можете дать мне код, объясняющий этот процесс?

Ответы [ 3 ]

13 голосов
/ 08 февраля 2012

List<T> будет иметь самую быструю вставку.
LinkedList<T> будет иметь самую быструю вставку в головку .

Разница будет минимальной для большинства практических применений;Вы должны использовать тот, который соответствует вашим потребностям.

4 голосов
/ 08 февраля 2012

Вставка значения в LinkedList - операция O (1). Список (реализуемый массивом) может потребовать дополнительного размещения и копирования элементов.

1 голос
/ 08 февраля 2012

Если ваши требования к производительности строгие, вы должны измерить в вашей среде и ваши данные , прежде чем принимать решение.

Я предложу некоторые предположения, что вы должныне принимайте как должное, пока вы не выполните свои собственные измерения:

  • Если вы заранее знаете количество элементов, просто используйте заранее выделенный List (или массив).
  • Если вы этого не сделаете:
    • Используйте список кусков (то есть LinkedList<List<T>>), чтобы избежать List изменения размера.
    • Или, для простоты, вы можете просто использовать List и понестинекоторое снижение производительности при изменении его размера для приема большего количества элементов.Я не уверен, оправдывает ли это наказание использование Dictionary или LinkedList вместо этого - но вы будете, если будете измерять;)

Все это по предположению васне волнует , где в коллекцию вставлен новый элемент и как вы извлекаете его позже ... Если вам нужно делать , то вы выберете свою структуру данных на основе это , а не просто вставить производительность в одиночку.

...