Article image

RS

Rosivaldo Silva28/01/2024 10:31
Compartilhe

Removendo Elementos de uma Lista Sem Dor de Cabeça!

    Estruturas de Dados são fundamentais para a manipulação eficiente de dados. Existem vários tipos prontos e disponíveis no Java, eliminando a necessidade de reinventar a roda ao implementá-los do zero. No entanto, isso não significa que não devemos estudá-los e aprender como usá-los. Ao compreender o funcionamento das estruturas de dados, expandimos significativamente nossas opções para resolver problemas.

    Uma estrutura de dados amplamente utilizada em Java é a List, que consiste em um conjunto de elementos do mesmo tipo, ligados continuamente na memória. Ao lidar com consultas a um banco de dados para obter uma lista de pessoas, é comum que os programadores usem uma lista para armazenar os valores na memória e manipulá-los conforme necessário.

    Considere um cenário simples em que, dada uma lista de inteiros, é necessário obter e excluir um elemento específico. Essa situação pode ser comparada a um carrinho de compras, onde há uma lista de produtos desejados, e ao longo do tempo, é possível adicionar ou remover itens dessa lista.

    No entanto, ao tentar remover um elemento da lista, é crucial proceder com cautela, pois a implementação dessa funcionalidade pode apresentar desafios e erros.

    A abordagem incorreta para a remoção de um elemento pode ser exemplificada da seguinte forma:

    image

    O erro neste código ocorre porque estamos utilizando um for-each para iterar sobre a lista e, ao tentar remover o elemento, surge um problema. Durante a iteração com um for-each, um objeto Iterator é criado internamente. Ao tentar modificar a lista, a exceção ConcurrentModificationException é lançada, indicando que a lista não pode ser alterada devido a um erro de concorrência durante a tentativa de remoção do elemento.

    Para resolver esse problema, é possível criar explicitamente um Iterator e utilizá-lo para iterar sobre a lista, como exemplificado no código a seguir:

    image

    Ao empregar o método hasNext(), verificamos se ainda há elementos para iterar, e o método next() nos retorna o elemento atual da iteração. Poderíamos também utilizar o comando break para encerrar a iteração assim que removemos o elemento desejado, otimizando o código dependendo da posição do elemento na lista.

    O resultado da remoção é:

    image

    Compartilhe
    Comentários (2)
    Marcio Herrero
    Marcio Herrero - 28/01/2024 14:54

    Artigo bem interessante!

    Afonso Simão
    Afonso Simão - 28/01/2024 13:21

    Ótimo artigo!

    parabéns.