Задать вопрос

В чем разница между List ArrayList и Array?

В чем разница и в каких случаях, что лучше использовать?
  • Вопрос задан
  • 27763 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Размер Array задаётся при создании, и за ним надо специально следить. Доступ к нему чуть быстрее, чем к List. Можно получить указатель на элемент через fixed. Если в Array лежат структуры - можно изменить их поля: A[x].B=c;
Элемент массива можно передавать в функцию как ref или out.
Преимущество List в том, что его размер меняется автоматически при добавлении элемента. Менять поля структур в нём нельзя, передавать элементы по ссылке тоже нельзя.
ArrayList - не generic тип (он пришёл ещё из первой версии C#), поэтому состоит только из объектов. С появлением List стал не очень нужен, разве что для случаев, когда действительно нужно хранить объекты разных типов - но и тогда List< object > его полностью заменит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
С такими вопросами принято ходить на MSDN и RSDN. Различий масса, но что когда использовать вам только опыт скажет... ну или Senior.
Если по ключевым моментам. - массив создается синтаксисом типа int[] a = new int[count].
Коллекции создаются иначе. Для массива как правило логически оправдано обращение по индексу, Для List чаще используется перебор всего(foreach) или выборки элементов по признакам через LINQ. Зачем нужен ArrayList я не знаю. У него есть один ключевой недостаток - он хранит в себе только object. Сие значит что туда можно нафигачить объектов любых типов(сам List строго типизирован на этапе создания), но и значит что нужно хоть примерно представлять что и как там хранится, а также использовать МНОГО приведений типов. Пусть коллеги дополнят меня еще какими-то пунктами.
Ответ написан
@dmitry_dvm
В Array строго указывается размер и больше не изменяется.
List - это обертка над Array с возможностью добавления элементов и другими менее значимыми плюшками.
ArrayList старый недженериковый тип, наследие темных времен. Его можно забыть.

Во всех стандартных случаях следует использовать List и передавать в него параметр capacity, если заранее известно кол-во элементов, которое в него добавится.
Array следует использовать в особых случаях, когда нужен ArrayPool, stackallock и прочие узкоспециализированные вещи. Но если вы ими занимаетесь, то и сами все знаете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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