Iterando para trás em uma lista

Iterando para trás em uma lista

1. Visão geral

Neste tutorial rápido, aprenderemos sobre as várias maneiras pelas quais podemos iterar para trás em uma lista em Java.

2. Iterator em Java

UmIterator é uma interface emJava Collections Framework que nos permite iterar sobre os elementos em uma coleção. Foi introduzido em Java 1.2 como uma substituição deEnumeration

3. Iterando para trás usando Core Java

3.1. Loop defor invertido

A implementação mais simples é usar um loopfor parastart from the last element of the list, and decrement the index conforme alcançamos o início da lista:

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

3.2. ListIterator

Podemos usarListIterator para iterar os elementos da lista.

Fornecer o tamanho da lista como um índice paraListIterator nos dará um iterador apontando para o final da lista:

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

Este iterador agora nos permite percorrer a lista na direção reversa:

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

3.3. Collections.reverse()

A classeCollections em Java fornece um método estático para reverter a ordem dos elementos em uma lista especificada:

Collections.reverse(list);

A lista invertida pode ser usada para iterar para trás os elementos originais:

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

Este método, entretanto,reverses the actual list by changing the order of elements in-place, e pode não ser desejável em muitos casos.

4. Iterando para trás usandoReverseListIterator do Apache

A bibliotecaApache Commons Collections tem uma boa classeReverseListIterator que nos permite percorrer os elementos em uma lista sem realmente revertê-la.

Antes de começar, precisamos importar as dependências mais recentes deMaven Central:


    org.apache.commons
    commons-collections4
    4.1

Podemos criar um novoReverseListIterator passando a lista original como um parâmetro do construtor:

ReverseListIterator reverseListIterator = new ReverseListIterator(list);

Podemos então usar este iterador para retroceder a lista:

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

5. Iterando para trás usandoLists.reverse() de goiaba

Da mesma forma, oGoogle Guava library also provides a static reverse() method in its Lists class que retorna uma visão reversa da lista fornecida.

A última versão do Guava pode ser encontrada emMaven Central:


    com.google.guava
    guava
    25.0

Invocar o método estáticoreverse() na classeLists nos dá a lista de forma reversa:

List reversedList = Lists.reverse(list);

A lista invertida pode ser usada para iterar para trás sobre a lista original:

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

Este métodoreturns a new list with the elements of the original list in reversed order.

6. Conclusão

Neste artigo, vimos diferentes maneiras de iterar para trás em uma lista em Java. Examinamos alguns exemplos usando o Java principal, além de bibliotecas populares de terceiros.

O código-fonte deste artigo e os casos de teste relevantes estão disponíveisover on GitHub.