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