HOWTO · Java

Iterar por meio de uma lista vinculada em Java

Este artigo apresenta como iterar por meio de uma lista vinculada em Java

Uma lista vinculada é uma coleção linear e ordenada de elementos de dados. A disposição dos elementos está em locais ubíquos ou aleatórios na memória. A estrutura de dados da lista vinculada é conectada por meio de nós. O Node contém o campo de dados e o link de referência que são os locais de memória do próximo elemento na sequência.

Armazenamos os elementos da lista vinculada em locais de memória não contíguos e, o último nó contém um ponteiro para a referência nula.

Existem muitas maneiras de iterar em uma lista vinculada. Aqui estão algumas maneiras mencionadas abaixo.

Iterar por meio da lista vinculada usando o loop for em Java

A classe LinkedList é instanciada usando a palavra-chave new no exemplo de código abaixo. O método add() da classe LinkedList adiciona um elemento à lista. O método add anexa o elemento especificado ao final desta lista. Este método é equivalente ao método addLast. O método retorna true quando o elemento é adicionado com sucesso à lista.

Após a criação da lista, usamos o loop for para iteração sobre ela. No código a seguir, int i=0 é uma instanciação da variável do contador. Use uma condição indicando que a variável deve ser menor que o tamanho da lista. E o tamanho da lista é calculado usando o método size(). Por fim, o valor da variável aumenta em um. Este processo completo será executado até que o valor da variável se torne maior do que o tamanho da lista.

package linkedList;

import java.util.LinkedList;

public class IterateLinkedListUsingForLoop {
  public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    list.add("First");
    list.add("Second");
    System.out.println("Iterating the list using for-loop");
    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
  }
}

O programa acima gera a saída conforme a seguir.

Iterating the list using for-loop
First
Second

Iterar através da lista vinculada usando o loop for aprimorado em Java

O loop for aprimorado também é conhecido como loop for-each e é um tipo de loop for.

No código a seguir, devemos instanciar um objeto de lista vinculada. Em seguida, deve adicionar alguns elementos (por exemplo, objetos String) a ele. Agora, para iteração, usaremos for-each neste caso.

package linkedList;

import java.util.LinkedList;

public class IteratingLinkedListUsingForEach {
  public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    list.add("First");
    list.add("Second");
    for (String temp : list) {
      System.out.println(temp);
    }
  }
}

A saída do programa é a mesma do primeiro programa.

Iterar através da lista vinculada usando o loop while

A instanciação e adição de elementos ao processo de listagem serão semelhantes em todas as formas mencionadas.

No exemplo abaixo, o valor da variável do contador é instanciado em 0 fora do loop while. A sintaxe do loop while não tem lugar para instanciação. Agora aplique a condição. Isso verifica se a variável é menor que o tamanho da lista fornecida. Ele retornará verdadeiro, e a função println() será executada. Depois disso, devemos incrementar a variável do contador. O processo se repetirá até que a variável se torne maior do que o tamanho da lista.

package linkedList;

public class IteratingLinkedListUsingWhileLoop {
  public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    list.add("First");
    list.add("Second");
    int i = 0;
    while (i < list.size()) {
      System.out.println(list.get(i));
      i++;
    }
  }
}

Iterar a lista vinculada usando a classe Iterator em Java

Um Iterator é uma classe que trabalha em loop de objetos Collections. Estes são Array, ArrayList, LinkedList e assim por diante. Nós o chamamos de Iterator, uma vez que faz um loop sobre os objetos da coleção. Deve-se usar métodos na classe Iterator para iterar sobre os objetos Collections.

Usamos o método iterator() para obter um Iterator para qualquer coleção. O método hasNext verifica se a lista possui mais elementos. Ele retorna true se a iteração tiver mais elementos presentes.

O método next obtém o próximo elemento do loop. Ele retorna o próximo objeto presente na iteração e lança NoSuchElementException se nenhum elemento estiver presente na lista.

O código a seguir demonstra a classe Iterator e seus métodos.

package linkedList;

public class IteratingLinkedListUsingIterator {
  public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    list.add("First");
    list.add("Second");
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
      System.out.println(iterator.next());
    }
  }
}

Iterar a lista vinculada usando Java 8 Streams

Um stream é sempre formado sobre um objeto Coleção. No programa abaixo, usamos o método stream para o mesmo. As funções são aplicadas na cadeia de funções de fluxo. O forEach é uma operação de terminal. Isso significa que não se pode realizar nenhuma operação após uma função do terminal. É necessário um fluxo de consumidor, e esse fluxo não emite elementos, em vez disso, os consome.

O código a seguir mostra o uso de fluxos Java 8 e sua função para iterar na lista.

package linkedList;

public class IteratingLinkedListUsingStreams {
  public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    list.add("First");
    list.add("Second");
    list.stream().forEach((element) -> { System.out.println(element); });
  }
}