Como retornar elemento por elemento de uma lista encadeada

4 respostas
Agemiro_Alves

Boa noite, estou precisando coletar todos os id’s de um objeto pra fazer algo, mas sempre retorna só o primeiro elemento da lista, porque isso acontece?

public int recuperoIds() {
    		No aux = inicio;
    		while(aux != null) {
    			int idsUsados = aux.obj.getId();
    			aux = aux.prox;
    			return idsUsados;
    		}
    		return 0;
    	}

4 Respostas

hugokotsubo

Ele só retorna o primeiro porque quando o return é executado, ele retorna o valor e sai do método (não executa mais nada que tem ali).

Então o seu código entra no while, pega o primeiro ID e já encontra um return. Com isso, o método retorna o valor do ID e não executa mais nada do método.


Enfim, se você quer todos os ID’s, então deveria retornar um array ou uma lista. Por exemplo:

public List<Integer> recuperoIds() {
    List<Integer> listaIds = new ArrayList<>();
    No aux = inicio;
    while (aux != null) {
        // adiciona o ID na lista
        listaIds.add(aux.obj.getId());
        aux = aux.prox;
    }
    // retorna a lista com todos
    return listaIds;
}

Uma característica da lista é que você pode adicionar elementos sem se preocupar com o tamanho, pois a própria lista já vai alocando mais espaço conforme a necessidade - e no caso de listas ligadas, acho que é o mais adequado, pois dependendo da implementação você não sabe o tamanho sem percorrê-la (como não ficou claro se você tem a informação do tamanho, deixei assim mesmo - se você soubesse o tamanho de antemão, poderia usar um array (int[] ids = new int[tamanho])).

Agemiro_Alves

Obrigado! Mas por coincidência eu tinha pensado nessa mesma solução!

Agemiro_Alves

Tava com medo de ser uma espécie de gambiarra… kkk

hugokotsubo

Por que gambiarra? Se tem que retornar mais de um, uma lista é uma solução perfeitamente adequada…:slight_smile:

Criado 7 de dezembro de 2020
Ultima resposta 7 de dez. de 2020
Respostas 4
Participantes 2