Который лучше для использования массива или Списка <>? [дубликат]

Этот вопрос уже имеет ответ здесь:

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

Например, у меня есть Список строк, не зная, в каком количестве объектов я буду нуждаться настолько имеющий.Add (Строка), функция действительно удобна. Я могу Добавить новые строки к списку в любое время легко.

Каковы преимущества/недостатки использования каждого?

Действительно ли списки являются новыми массивами?

25
задан Gage 2 July 2010 в 13:46
поделиться

8 ответов

Для правильного ответа на вопрос действительно требуется больше контекста:

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

  • Если коллекция не должна изменяться внешним миром, используйте IEnumerable .
  • Если коллекция будет изменена внешним миром, используйте ICollection .
  • Если требуется индексированный доступ, используйте IList .

В частной реализации не так важно использовать абстрактные типы:

  • Если вам нужен индексированный доступ и известен окончательный размер, используйте T [] или Список .
  • Если вам нужен индексированный доступ и вы не знаете окончательный размер, используйте List .
  • Если вы планируете получить доступ к элементам в шаблоне LIFO, используйте Stack .
  • Если вы планируете обращаться к элементам в шаблоне FIFO, используйте Queue .
  • Если вам нужно получить доступ к элементам в начале и конце списка, но не в середине, используйте LinkedList .
  • Если вам не нужны дубликаты, используйте HashSet .

В .NET 4.0 у вас есть еще несколько вариантов, но это основные.

36
ответ дан 28 November 2019 в 17:58
поделиться

Список реализован с использованием массива String [] .

Если вы не знаете, сколько элементов у вас будет, используйте List

. Вы можете указать предполагаемое (или максимальное) количество элементов, которое вы ожидаете, в параметре конструктора емкости ( new List (10) ), это будет начальный размер базового массива.

Когда вы Add () элемент, и нет места для этого элемента, базовый массив копируется в новый массив двойного размера.

Что я делаю: когда я знаю точный размер коллекции и знаю, что не буду изменять размер коллекции, я использую массив ( String [] ). В противном случае я использую List .

Кстати, это касается любого типа, а не только String .

22
ответ дан 28 November 2019 в 17:58
поделиться

В большинстве сценариев разница в производительности не ощутима, поэтому я бы использовал List, поскольку он предоставляет гораздо больше функциональности, которая может быть полезна в различных ситуациях.

3
ответ дан 28 November 2019 в 17:58
поделиться

Используйте List<> в большинстве случаев, и не беспокойтесь о производительности. Велика вероятность, что вы пройдете через всю свою карьеру и вам никогда не понадобится настраивать производительность путем преобразования List<> в массив.

3
ответ дан 28 November 2019 в 17:58
поделиться

Если вы не знаете размер добавляемых элементов, всегда выбирайте List, а не строковый массив.

2
ответ дан 28 November 2019 в 17:58
поделиться

Если вам нужен динамический размер, используйте List .

Если вас беспокоит производительность, я бы посоветовал начать с List и посмотреть, действительно ли существует проблема. Он использует массивы внутри, поэтому я думаю, что по большей части проблем с производительностью быть не должно.

Если у вас есть коллекция со статическим размером, вы все равно можете использовать string [] .

2
ответ дан 28 November 2019 в 17:58
поделиться

Конечно, это зависит от вашего приложения, но в обстоятельствах предпочтительнее List (или даже просто IEnumerable .

]
2
ответ дан 28 November 2019 в 17:58
поделиться

Это зависит от сценария использования, НО это также микро-оптимизация, пока вы не определили узкое место с помощью профилирования. Используйте то, что лучше всего подходит для конкретного использования.

7
ответ дан 28 November 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: