Iterando hacia atrás a través de una lista

1. Información general

En este tutorial rápido, aprenderemos varias formas en las que podemos iterar hacia atrás a través de una lista en Java.

2. Iterador en Java

Un iterador es una interfaz en el marco de colecciones de Java que nos permite iterar sobre los elementos de una colección. Se introdujo en Java 1.2 como reemplazo de Enumeration.

3. Iterando hacia atrás con Core Java

3.1. Invertido para bucle

La implementación más simple es usar un bucle for para comenzar desde el último elemento de la lista y disminuir el índice a medida que llegamos al comienzo de la lista:

for (int i = list.size(); i-- > 0; ) { System.out.println(list.get(i)); }

3.2. ListIterator

Podemos usar un ListIterator para iterar sobre los elementos de la lista.

Proporcionar el tamaño de la lista como índice al ListIterator nos dará un iterador que apunta al final de la lista:

ListIterator listIterator = list.listIterator(list.size());

Este iterador ahora nos permite recorrer la lista en la dirección inversa:

while (listIterator.hasPrevious()) { System.out.println(listIterator.previous()); }

3.3. Colecciones.reverse ()

La clase Colecciones en Java proporciona un método estático para invertir el orden de los elementos en una lista específica:

Collections.reverse(list);

La lista invertida se puede usar para iterar hacia atrás sobre los elementos originales:

for (String item : list) { System.out.println(item); }

Sin embargo, este método invierte la lista real al cambiar el orden de los elementos en el lugar y puede no ser deseable en muchos casos.

4. Iterando hacia atrás usando el ReverseListIterator de Apache

La biblioteca Apache Commons Collections tiene una agradable clase ReverseListIterator que nos permite recorrer los elementos de una lista sin invertirla.

Antes de comenzar, necesitamos importar las últimas dependencias de Maven Central:

     org.apache.commons     commons-collections4     4.1 

Podemos crear un nuevo ReverseListIterator pasando la lista original como parámetro de constructor:

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

Luego podemos usar este iterador para recorrer la lista hacia atrás:

while (reverseListIterator.hasNext()) { System.out.println(reverseListIterator.next()); }

5. Iterando hacia atrás usando las listas de Guava.reverse ()

Del mismo modo, la biblioteca Google Guava también proporciona un método reverse () estático en su clase Lists que devuelve una vista inversa de la lista proporcionada.

La última versión de Guava se puede encontrar en Maven Central:

     com.google.guava     guava     25.0 

Invocar el método estático reverse () en la clase Lists nos da la lista de forma inversa:

List reversedList = Lists.reverse(list);

La lista invertida se puede usar para iterar hacia atrás sobre la lista original:

for (String item : reversedList) { System.out.println(item); }

Este método devuelve una nueva lista con los elementos de la lista original en orden inverso .

6. Conclusión

En este artículo, hemos analizado diferentes formas de iterar hacia atrás a través de una lista en Java. Repasamos algunos ejemplos usando el núcleo de Java, así como también usando bibliotecas populares de terceros.

El código fuente de este artículo y los casos de prueba relevantes están disponibles en GitHub.