Erro em ArrayList

6 respostas
D

Estou usando a Classe ArrayList para guardar alguns objetos de uma classe chamada Plant, que eu criei. Tenho um objeto dessa classe declarado como pl que é modificada constantemente. por isso ante de uma modificação eu o salvo na lista. Acontece que sempre que que eu uso o método add(pl) de ArrayList
todos os registros guardados até então são substituidos pela última inserção…

Por exemplo… se eu tenho uma lista vazia, insiro nela o objeto da classe Plant p1, depois modifico o objeto pl e tento o adicionar na lista, ele á adicionado, e todos os elementos anteriores torna-se iguais a este ultimo elemento inserido e assim por diante.

Garanto que não há erro de lógica das inserções e nem tenho nenhum laço que possa estar causando isso;

Será que há algo errado com a classe que eu fiz;

Alquem sabe me dizer o que pode estar acontecendo??

6 Respostas

G

8O
Não entendi direito o que tu quer fazer.
Tu quer ir adicionando no arrayList varios Plant, mas
um diferento do outro, tipo, o pl1 é diferente do proximo?

Se tu quer isso, adicionar inumeros itens de um mesmo tipo(objeto),
tu tens que fazer mais ou menos assim:

exemplo

int x = 10;
Plant a = null;
Arraylisst aux = new ArrayList();
for (int i =0; i<x; i++){
 a = new Plant();
a.set();
a.get();
.
.
.
aux.add(a);

Tu ta fazendo mais ou menos isso?

R

Isso ocorre pq, vc está usando uma única instância de Plant.

O ArrayList quando executa o Add(); insere referencias de objeto.

Entao como vc tem uma unica instancia ele insere na boa, mas a partir do momento que vc alterar um objeto Plant o arraylist irá alterar as referencias tb.

Acho que é esse o seu problema.

Uma solução:
Ter um laco que a cada iteração cria um novo objeto Plant, e adicioná-lo a lista. Depois vc anula o objeto.

Abraços, :wink:

R

Isso ocorre pq, vc está usando uma única instância de Plant.

O ArrayList quando executa o Add(); insere referencias de objeto.

Entao como vc tem uma unica instancia ele insere na boa, mas a partir do momento que vc alterar um objeto Plant o arraylist irá alterar as referencias tb.

Acho que é esse o seu problema.

Uma solução:
Ter um laco que a cada iteração cria um novo objeto Plant, e adicioná-lo a lista. Depois vc anula o objeto.

Abraços, :wink:

A

acho q é exatamente isso q o Renan falou:
O ArrayList guarda uma referência ao objeto, q é o mesmo q vc está alterando.
Então vc terá q criar uma nova instância do seu obj cada vez q vc quiser adiciona-lo à lista.

[]'s

G

:lol: é Isso ai…
é como ta no meu exemplo!!!

mete bronca altera e avisa a galera…

R

“gianr”:
:lol: é Isso ai…
é como ta no meu exemplo!!!

mete bronca altera e avisa a galera…

Sim, eu só dei uma explicada teorica…

naum entendi isso

Abraços,
:wink:

Criado 8 de outubro de 2004
Ultima resposta 8 de out. de 2004
Respostas 6
Participantes 4