Двухтомник Core Java Хорстманна и Корнела 8-е издание. Есть в переводе на русский ЕМНИП называется Java 2. (Том 1: Основы, Том 2: Тонкости программирования). Оригинал можно найти в электронном виде.
Длина массива после его создания не может меняться. Выделяете новый, размером на 1 больше, копируете туда предыдущий и добавляете последнее значение. Либо используете другой тип данных.
Vector(если нужен threadsafe) или LinkedList( если не нужен) тогда уж.
ArrayList внутри содержит обычный массив со всеми его бонусами и проблемами, так, что бонусов по сравнению с создать новый и скопировать туда всё может и не оказаться.
всё таки по частому добавлению/удалению элементов LinkedList будет _гораздо_ быстрее ArrayList, а доступ к i-тому элементу у ArrayList лучше и равняется доступу к эл-ту в массиве.