2012-06-30 138 views
18

Tengo el siguiente código de java.¿Agregar una lista a otra lista en java?

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

Ahora la lista tiene 100 objetos.

Si creo un ejemplo más de la siguiente manera:

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

Gracias!

+2

mente que yo remontó la pregunta original, porque sus ediciones omitieron todo el punto de la pregunta en sí. –

+4

El problema es que esto ya no es una pregunta, y no tiene ningún sentido en absoluto;) –

+0

por favor esta pregunta necesita editar, no tiene sentido. – Ogbe

Respuesta

24

Un objeto está solo una vez en la memoria. Su primera adición a list solo agrega las referencias de objeto.

anotherList.addAll también agregará las referencias. Entonces solo quedan 100 objetos en la memoria.

Si cambia list agregando/quitando elementos, anotherList no se cambiará. Pero si cambia cualquier objeto en list, su contenido también se cambiará cuando acceda a él desde anotherList, ya que se está consultando la misma referencia en ambas listas.

0

no ... Una vez u han ejecutado la declaración anotherList.addAll (lista) y después de eso si u cambiar algunos datos de la lista que no lleva a otra lista

+0

su respuesta es ambigua. – Joset

9

100, que llevará a cabo las mismas referencias. Por lo tanto, si realiza un cambio en un objeto específico en el list, afectará al mismo objeto en anotherList.

La adición o eliminación de objetos en cualquiera de las listas no afectará a la otra.

list y anotherList son dos instancias diferentes, solo tienen las mismas referencias de los objetos "dentro" de ellas.

+0

gracias por su respuesta. si agrego/elimino cualquier objeto en la lista, ¿el mismo cambio se refleja en la otra lista? – user1016403

+2

no, no afectará. list y anotherList son dos instancias diferentes, solo tienen las mismas referencias de los objetos "dentro" de ellas. – Joset

4

Citando el javadoc oficial de 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.) 

por lo que copiar las referencias de los objetos en list a anotherList. Cualquier método que no opere en los objetos referenciados de anotherList (como eliminación, adición, clasificación) es local y, por lo tanto, no influirá en list.

2

Extracto de la API Java para addAll (colección c) en la interfaz Listasee here

"agrega todos los elementos de la colección especificada al final de esta lista, en el orden que son devueltos por el iterador de la colección especificada (operación opcional) ".

Usted tendrá la mayor cantidad de objetos que tiene en ambas listas - el número de objetos en su primera lista más el número de objetos que tiene en su segunda lista - en su caso 100.

Cuestiones relacionadas