2015-05-27 4 views
5

Non riesco a modificare l'elenco originale.Aggiungi elenco alla fine di un altro elenco (non solo riferimenti di copia)

Ecco come ho visto fare:

List<String> l1 = new ArrayList<String>(); 
l1.add("Hello"); 
l1.add("World"); 
List<String> l2 = new ArrayList<String>(l1); //A new arrayList. 
l2.add("Everybody"); 

Quindi io ora avrebbe un nuovo elenco, che è una copia del primo. E posso modificare il secondo senza che il primo sia cambiato.

E ora ho difficoltà a capire come fare lo stesso, ma aggiungendo gli elementi alla fine dell'elenco.

Ciò che pensavo stesse facendo esattamente il codice precedente e aggiungendo l'elenco a un altro elenco. Ad esempio con addAll. Ma vedo dappertutto come questo copia solo i riferimenti e così via, quindi se è all'interno di un metodo o il suo codice rmi la lista stessa non sarebbe completa, otterrebbe riferimenti all'altra lista che ho appena creato.

Dal momento che ho bisogno di fare questo per molti tipi di lista non sono sicuro se andare voce per articolo è l'ideale. Quindi ho bisogno di aggiungere una lista alla fine di un'altra lista, se possibile.

+0

Quali articoli si desidera aggiungere a quale fine di quale elenco? Gli elenchi di oggetti contengono sempre solo riferimenti, quindi puoi copiare solo i riferimenti da un elenco a un altro, se usi il costruttore o l'adall per quello non importa – LionC

+0

Copia i riferimenti degli elementi che vengono aggiunti, non dell'elenco. E questo vale anche per il metodo che hai mostrato (con la 'nuova ArrayList (l1)'). – RealSkeptic

+0

La copia di riferimenti a classi immutabili non dovrebbe essere un problema. 'String's sono immutabili. – fabian

risposta

6

addAll copia i riferimenti degli elementi dell'elenco di origine alla fine dell'elenco di destinazione, non copia un riferimento all'elenco di origine stesso.

Questo non è diverso da ciò che il costruttore che si sta utilizzando - new ArrayList<String>(l1) - fa. Se uno soddisfa i tuoi requisiti, anche l'altro lo fa.

BTW, nel caso di un Elenco di una classe immutabile, come String, non importa che i riferimenti agli elementi siano copiati (al contrario delle copie degli elementi), poiché non è possibile modificare gli elementi, quindi nulla che tu possa fare per il contenuto della seconda lista influirà sul contenuto della lista originale.

+0

Allright, non lo sapeva. Ma questo significa che se modifico una lista, sto modificando entrambe, giusto? Come evito quello? Voglio una copia della lista, alla fine di una precedentemente creata, se possibile – keont

+0

@keont Per dirla semplicemente. Gli 'Oggetti' sono referenziati, non l'' Elenco' –

+0

@keont No, se aggiungi o rimuovi elementi da una lista, l'altro rimane invariato. – Eran

0

Si dice che si desidera modificare il nuovo elenco senza influire sul vecchio ma poi si lamenta che vengono memorizzati solo i riferimenti. Stai provando a modificare il nuovo elenco o gli oggetti in esso contenuti?

+0

Questa non è una risposta da nessuna parte Questo avrebbe dovuto essere un commento e so che c non pubblicare un commento con la tua bassa reputazione, ma non è difficile ottenerne alcuni. –