Basic difference is that arrays are of fixed size. Whereas an ArrayList implements the list data structure and can dynamically grow. While arrays would be more performant that a list, a list would be far more flexible since you don’t need to know the required size initially.
In case of Arraylist C# compiler do boxing and unboxing of the value to object.
In case of GenericList there is no need to do boxing and unboxing.
Please find the difference below:
1) ArrayList, under the covers this is an Object, so to put an int value into the ArrayList we’ll have to box it (in the process creating a heap allocated Int32) and then put the reference to the boxed value into the array.
2) List<int>, with the generic implementation under the covers we’re using an int, no boxing needed and instead we just shove the actual value being added into the array (thereby avoiding creating the heap allocated Int32).