import java.util.ArrayList;
import java.util.Iterator;
ArrayList<String> nomes = new ArrayList<String>();
nomes.add("Perry");
nomes.add("Mason");
nomes.add("Jack");
nomes.add("Burton");
/* Creamos o 'iterator' que nos permitirá percorrer o ArrayList. */
//
// Para crealo, chamamos o método .iterator() que ten ArrayList. Éste
// devólvenos un 'iterator' do ArrayList, e gardámolo nunha
// variable de tipo Iterator á cal indicámoslle o tipo do ArrayList
// entre '<>'; neste caso String.
Iterator<String> it = nomes.iterator();
// ^ ^ ^.. método que pertence ó obxeto 'nomes',
// | | que é un ArrayList de Strings.
// | | Devolve un 'iterator' sobre 'nomes'.
// | |
// | .. ó 'iterator' hai que especificarlle o tipo da colección
// | que vai percorrer. Neste caso percorre un ArrayList que
// | é de tipo String.
// |
// .. o tipo Iterator que indica que o obxeto creado 'it', será un
// 'iterator'.
/* Percorremos o ArrayList 'nomes' utilizando Iterator 'it' */
//
// Utilizamos un bucle tipo 'while', que se repite namentres o
// predicado sexa verdadeiro. Os obxetos de tipo Iterator teñen un
// método .hasNext() que devolve verdadeiro se aínda quedan elementos
// no ArrayList por percorrer, e falso unha vez non queden máis
// elementos no ArrayList que percorrer.
//
// Se o ArrayList ten máis elementos, para obter o seguinte
// usamos o método .next() de Iterator. Neste caso .next() devolverá
// un String.
while(it.hasNext()) {
System.out.println(it.next());
// ^.. devolve o seguinte String do ArrayList.
}