Этот вопрос уже имеет ответ здесь:
Я задавался вопросом, какой тип будет иметь лучшую производительность и который Вы думаете, должен использоваться.
Например, у меня есть Список строк, не зная, в каком количестве объектов я буду нуждаться настолько имеющий.Add (Строка), функция действительно удобна. Я могу Добавить новые строки к списку в любое время легко.
Каковы преимущества/недостатки использования каждого?
Действительно ли списки являются новыми массивами?
Для правильного ответа на вопрос действительно требуется больше контекста:
В общедоступном API вы должны попытаться использовать абстрактные типы коллекций, чтобы вы могли изменить внутреннюю реализацию позже, если вам нужно .
IEnumerable
. ICollection
. IList
. В частной реализации не так важно использовать абстрактные типы:
T []
или Список
. List
. Stack
. Queue
. LinkedList
. HashSet
. В .NET 4.0 у вас есть еще несколько вариантов, но это основные.
Список
реализован с использованием массива String []
.
Если вы не знаете, сколько элементов у вас будет, используйте List
. Вы можете указать предполагаемое (или максимальное) количество элементов, которое вы ожидаете, в параметре конструктора емкости ( new List
), это будет начальный размер базового массива.
Когда вы Add ()
элемент, и нет места для этого элемента, базовый массив копируется в новый массив двойного размера.
Что я делаю: когда я знаю точный размер коллекции и знаю, что не буду изменять размер коллекции, я использую массив ( String []
). В противном случае я использую List
.
Кстати, это касается любого типа, а не только String
.
В большинстве сценариев разница в производительности не ощутима, поэтому я бы использовал List
, поскольку он предоставляет гораздо больше функциональности, которая может быть полезна в различных ситуациях.
Используйте List<> в большинстве случаев, и не беспокойтесь о производительности. Велика вероятность, что вы пройдете через всю свою карьеру и вам никогда не понадобится настраивать производительность путем преобразования List<> в массив.
Если вы не знаете размер добавляемых элементов, всегда выбирайте List
, а не строковый массив.
Если вам нужен динамический размер, используйте List
.
Если вас беспокоит производительность, я бы посоветовал начать с List
и посмотреть, действительно ли существует проблема. Он использует массивы внутри, поэтому я думаю, что по большей части проблем с производительностью быть не должно.
Если у вас есть коллекция со статическим размером, вы все равно можете использовать string []
.
Конечно, это зависит от вашего приложения, но в обстоятельствах предпочтительнее List
(или даже просто IEnumerable
.
Это зависит от сценария использования, НО это также микро-оптимизация, пока вы не определили узкое место с помощью профилирования. Используйте то, что лучше всего подходит для конкретного использования.