2009-10-07 18 views
5

Sto tentando di copiare il contenuto di un arraylist in un altro oggetto. Ho provato l'inizializzazione del nuovo oggetto ArrayList nei seguenti modiJava - copia di oggetti arraylist

newArrList.addAll(oldArrList); 

e

newArrList = new ArrayList(oldArrList); 

Ma ogni volta che faccio una modifica a uno degli elenchi di array, il valore cambia anche in un altro ArrayList.

Qualcuno può dirmi come posso evitarlo.

Grazie.

risposta

15

ArrayList conterrà solo riferimenti agli oggetti, non agli oggetti stessi. Quando copi i contenuti di una lista in un'altra, copi questi riferimenti. Ciò significa che le due liste faranno riferimento agli stessi oggetti.

Sospetto che quando dici di apportare una modifica a uno degli elenchi, in realtà intendi che stai modificando uno degli oggetti di riferimento nell'elenco. Questo è normale.

Se si desidera che gli elenchi contengano riferimenti a oggetti indipendenti, è necessario creare una copia profonda degli oggetti durante la copia da una lista a un'altra. Esattamente come ciò dipenderà dagli oggetti che stai copiando.

+0

Ciao, per 'deep copy', vuoi dire che gli oggetti/contenuti devono essere copiati uno per uno? –

+0

@ user1282407: Sì. Invece di mantenere riferimenti a oggetti esistenti, crei nuovi oggetti con lo stesso contenuto (eccetto per oggetti immutabili, dove non ha importanza). –

+0

Ok. Grazie! Immagino che non ci sia un modo più semplice per copiare solo i contenuti. . –