Problema ao Copiar ArrayList

3 respostas
P

Tentei copiar um ArrayList para alterar alguns de seus dados dentro de uma iteração
sem afetar os dados originais do Array.

Usei a seguinte código para copiar o Array

List<Array> array2 = new ArrayList<Array>();
array2.addAll(array1);

Em seguida alterei seus dados com o seguinte código

for (ItemArray2 itemArray2 : array2) {
   if(condicao){
      Integer restante = itemArray2.getQuantidade().intValue() - 1;
      itemArray2setQuantidade(restante);
   }
}

Porém quando executo o setQuantidade(restante) de itemArray2 o valor da propriedade é alterado nos
dois ArrayList’s. A propriedade quantidade é um Integer. Existe uma forma de alterar o valor dessa propriedade
do tipo Integer em apenas um dos ArrayList’s sem afetar os dados do outro?

Existe outra forma de copiar os dados de um ArrayList diferente do método addAll(Collection) que pelo que pude ver utiliza ArrayCopy;

3 Respostas

S

è isso mesmo que acontece. Vc tem duas listas, mas apenas um objeto item.
Vc tem o mesmo objeto nas duas listas. Quando muda, vc não muda “em uma” , vc muda o objeto.

Pictoricamente a sua lista é constituida de objetos a, b , c assim

lista1 = {a, b, c}

quando copia vc cria uma segunda lista com os mesmos objetos

lista2 = {a,b,c}

quando altera uma propriedade de ‘a’ vc altera nos dois porque ‘a’ está nos dois

Para copiar uma lista e criar objetos diferentes vc precisa clonar os objetos. Isso pode ser feito de duas formas : implementando Cloneable ou apenas criando um construtor de copia.
Nesse caso vc cria a segunda lista assim

List lista2 = new ArrayList(list1.size());
for (Item : lista1){
   lista2.add(item.clone());
}
P

Muito bem esclarecido sergiotaborda parabéns.

:stuck_out_tongue:

P

Valew Sérgio, instanciei cada objeto do ArrayList em um for e fui setando as propriedades via métodos set com cópias dos objetos originais.
Aih funcionou vlw

Criado 23 de maio de 2008
Ultima resposta 24 de mai. de 2008
Respostas 3
Participantes 3