Looping via iterators is more general than via indices. Iterators can be used to iterate over any collection. By contrast, a positional index is a technical detail of sequence containers. The only reason you might want to be this particular is if the sequential nature of the container is intrinsic to your problem and you need to know the numeric position for your algorithm.
But otherwise, and in general, you should prefer the iterator style, because it is more general and will thus lead to more uniform code. Different parts of your code may use different containers (or you may even wish to change the container later), but you will immediately recognize iterations if you write all of them in the same way, rather than having a different style depending on the details of the container.
That said, it is even more preferable to use a range-based for loop whenever you only want to act on each element in the container, without wanting to modify the entire container as a whole (via insert/delete). When you say for (String s : arrayList) { /*...*/ }, you don't even need to mention the name of the container or of any iterator in the body of the loop! With this in mind, iterator (or index) loops should be reserved for situations where you decide inside the loop that you need to modify the container, e.g. by erasing the current element, or where the position of the element inside the container is relevant.