Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Pra onde vão as informações inseridas na memória?

A minha dúvida é a seguinte:

public void addElement(Object element) {

        if (totalElements == 0) {
            addElementInTheBeginning(element);
        } else {            
            Cell newCell = new Cell(element, null);
            this.lastCell.setNext(newCell);
            this.lastCell = newCell;
            totalElements++;
        }
    }

Eu entendi que a nova celula irá se tornar a última no final como é informado nessa parte do código "this.lastCell = newCell;" Mas a minhas dúvida é: Para onde foi a informação da última celula anterior. Onde ela fica armazenada. Entender o array na aula anterior foi fácil, já que ficam todos os items na mesma variável. Mas nesse caso a variavel acaba de ser preenchida por outro conteúdo. Então onde foi parar o conteúdo dos elementos cadastrados anteriormente?

3 respostas

Oi Alex, tudo bem?

O atributo lastCell apenas referencia a última célula da lista.

Quando estamos adicionando uma nova célula na lista, a nossa última célula recebe esta nova célula como a próxima e essa vira a última célula (lastCell). O que fazemos é apenas trocar a referência da nossa lista.

Opa Yuri, essa parte eu entendi. É porque é o seguinte: Eu imagino que a criação da variável gera um espaço na memória para a informação ser armazenada. E como na lastCell foi atribuído um novo valor, para mim é como se o espaço na memória criado pela lastCell estivesse sendo ocupado por nova informação, deixando a anterior por onde? A minha dúvida é onde que ficam armazenadas as informações anteriores, se a informação está numa variável oculta, no firstCell. Eu não entendo como funciona o armazenamento dos dados anteriores nesse caso.

solução!

Opa Alex, tudo bem?

Esse atributo (lastCell) guarda apenas a referência do objeto Cell.

Quando colocamos mais um item na lista, a célula que era a última passa a referenciar esse novo objeto (this.lastCell.setNext(newCell);).

Quando falamos que o último item da lista é esse novo objeto (this.lastCell = newCell;), de fato, estamos atribuindo um novo valor a esse atributo, estamos mudando a sua referência. Agora ele referencia ao novo item, mas aquela célula que era a última não foi apagada da memória. Isso porque existe um elemento na lista que aponta para ela, o elemento que agora é o antepenúltimo.

Ou seja, quando alteramos o valor do atributo lastCell não estamos sobrescrevendo esse objeto. Ele ainda continua na memória, o que fazemos é alterar o objeto que ela referencia.