and I while the iterator is on Object A, and I use it.remove() I end up with and ArrayList of: Object B Object B
How did you verify this? Did you put something like the following directly after the while loop?
I see some strange things in the code:
Did you deliberately print out the same object each time (get(0))?
This means that in the [A, B] list case, B will be processed inside the while loop and once again in this if statments after the while loop?
To be correct, the behaviour of the remove() method depends on the implementation of the Iterator (and possibly the behaviour of the underlying List), but if it is really an ArrayList, it should give you the expected behaviour.