2009-10-07 30 views
5

que estoy tratando de copiar el contenido de un ArrayList en otro objeto. He intentado inicializar el nuevo objeto ArrayList de las siguientes manerasJava - copiar objetos ArrayList

newArrList.addAll(oldArrList); 

y

newArrList = new ArrayList(oldArrList); 

Pero cada vez que realiza un cambio en una de las listas de la matriz, el valor también cambia en el otro ArrayList.

Puede alguien por favor dígame cómo puedo evitar esto.

Gracias.

Respuesta

15

El ArrayList únicamente incluya referencias a objetos - no los propios objetos. Cuando copia el contenido de una lista en otra, está copiando esas referencias. Eso significa que las dos listas se referirán a los mismos objetos.

Sospecho que cuando dice que realiza un cambio en una de las listas, en realidad quiere decir que está haciendo un cambio a uno de los objetos con la referencia en la lista. Eso es de esperar.

Si desea que las listas tengan referencias a objetos independientes, necesitará hacer una copia profunda de los objetos mientras los copia de una lista a otra. Exactamente cómo funciona eso dependerá de los objetos que está copiando.

+0

Hola, por 'profunda copy', ¿Quiere decir que los objetos/contenidos deben copiarse uno por uno? –

+0

@ user1282407: Sí. En lugar de mantener referencias a objetos existentes, crea objetos nuevos con los mismos contenidos (a excepción de objetos inmutables, donde no importa). –

+0

Bien. ¡Gracias! Supongo que no hay una manera más fácil de copiar contenido solamente. . –