2012-06-30 20 views
18

Ho sotto il codice java.Aggiunta di una lista a un'altra lista in java?

List<SomePojo> list = new ArrayList<SomePojo>(); 
//add 100 SomePojo objects to list. 

Ora l'elenco contiene 100 oggetti.

se creo un altro esempio come di seguito:

List<SomePojo> anotherList = new ArrayList<SomePojo>(); 
anotherList .addAll(list); 

Grazie!

+2

Mente che ho respinto la domanda originale, perché le tue modifiche hanno perso l'intero punto della domanda stessa. –

+4

Il problema è che questa non è più una domanda, e non ha alcun senso affatto) –

+0

per favore questa domanda ha bisogno di essere modificata, non ha senso. – Ogbe

risposta

24

Un oggetto è una sola volta in memoria. La prima aggiunta a list aggiunge solo i riferimenti agli oggetti.

anotherList.addAll aggiungerà anche i riferimenti. Quindi ancora solo 100 oggetti in memoria.

Se si modifica list aggiungendo/rimuovendo elementi, anotherList non verrà modificato. Ma se si modifica qualsiasi oggetto in list, anche il contenuto verrà modificato, quando si accede da esso a anotherList, poiché lo stesso riferimento viene puntato da entrambi gli elenchi.

0

no ... Una volta u hanno eseguito la dichiarazione anotherList.addAll (lista) e dopo che se u modificare alcuni dati della lista non porta ad un altro elenco

+0

la tua risposta è ambigua. – Joset

9

100, si terrà gli stessi riferimenti. Pertanto, se si apporta una modifica a un oggetto specifico nello list, ciò influirà sullo stesso oggetto in anotherList.

L'aggiunta o la rimozione di oggetti in uno qualsiasi degli elenchi non influisce sull'altro.

list e anotherList sono due istanze diverse, contengono solo gli stessi riferimenti degli oggetti "all'interno" di essi.

+0

grazie per la tua risposta. se aggiungo/rimuovo qualsiasi oggetto in elenco, lo stesso cambiamento si riflette su otherlist? – user1016403

+2

no, non ha effetto. list e anotherList sono due istanze diverse, contengono solo gli stessi riferimenti degli oggetti "dentro". – Joset

4

Citando il javadoc ufficiale del List.addAll:

Appends all of the elements in the specified collection to the end of 
this list, in the order that they are returned by the specified 
collection's iterator (optional operation). The behavior of this 
operation is undefined if the specified collection is modified while 
the operation is in progress. (Note that this will occur if the 
specified collection is this list, and it's nonempty.) 

Così si copierà i riferimenti degli oggetti in list a anotherList. Qualsiasi metodo che non funziona sugli oggetti di riferimento di anotherList (come rimozione, aggiunta, ordinamento) è locale e pertanto non influenza list.

2

Estratto dal API Java per addAll (raccolta c) in Interface Listsee here

"Aggiunge tutti gli elementi della collezione specificato alla fine di questa lista, nell'ordine che vengano restituiti dall'iteratore della raccolta specificato (operazione facoltativa). "

Si si avrà il più oggetto come avete in entrambe le liste - il numero di oggetti in vostro primo elenco più il numero di oggetti che avete nella vostra seconda lista - nel vostro caso 100.

Problemi correlati