In your array example you create an array of Alexander_Shape objects. For each shape you enter its type and its properties. Next you create the new shape object and add it to your array.
Do the same with the ArrayList:
ArrayList<Alexander_Shape> listShape = new ArrayList<Alexander_Shape>(numObjects);
From then on create shapes as you have been and add them to listShape.
To dump them out, get each shape and output it as you have been with your normal array.
In doing it this way you will see that there is actually very little code to change to replace your array with an ArrayList.
BTW, I suspect the exception happens here. Above you added 4 doubles to your ArrayList. ArrayList.get() method takes an index as a parameter you are passing the coordinate cast to an int. The coordinate entered was 4 and your ArrayList only has 4 items at indices 0, 1, 2, 3 - 4 is out of bounds.
Alexander_Rectangle2D newShape = new Alexander_Rectangle2D(listDouble.get((int) x),
listDouble.get((int) y),
listDouble.get((int) h), listDouble.get((int) w));
But, if you create a single ArrayList of Alexander_shape objects as I indicated above you will bypass all this and your exception will go away.