Array - это базовый тип, в котором элементы расположены строго друг за другом. Когда вы создаёте массив, то вы просите у ОС память такую, чтобы уместить все элементы "без разрывов". Поэтому такого рода вещи сложно динамически менять. Интересная
особенность, длина массива не является частью типа.
Поэтому чтобы такого не было, то есть другой тип данных (некоторая коллекция, которая ведёт себя как массив-список), там элементы можно вставлять хоть посередине, и вам как бы без разницы как это внутри создано. Но, этот объект гораздо сложнее обычного Array, поэтому в каких-то искусственных тестах он может быть медленнее.
У ArrayList есть много "вкусных" методов, поэтому в основном люди пользуются именно им. Поэтому я согласен с предыдущим оратором - "да, можно использовать ArrayList везде". Я тоже не против :)