Copia de Java ArrayList

Tengo un ArrayList l1 de tamaño 10. Asigno l1 al nuevo tipo de referencia de lista l2 . ¿ l1 y l2 al mismo objeto ArrayList ? ¿O está asignada una copia del objeto ArrayList a l2 ?

Cuando uso la referencia l2 , si actualizo el objeto list, también refleja los cambios en el tipo de referencia l1 .

Por ejemplo:

 List l1 = new ArrayList(); for (int i = 1; i <= 10; i++) { l1.add(i); } List l2 = l1; l2.clear(); 

¿No hay otra manera de asignar una copia de un objeto de lista a una nueva variable de referencia, además de crear 2 objetos de lista y copiar en colecciones de antiguas a nuevas?

Sí, la asignación solo copiará el valor de l1 (que es una referencia) a l2 . Ambos se referirán al mismo objeto.

Crear una copia superficial es bastante fácil:

 List newList = new ArrayList<>(oldList); 

(Solo como un ejemplo)

Intenta usar Collections.copy(destination, source);

Sí, l1 y l2 señalarán la misma referencia, el mismo objeto.

Si desea crear una nueva ArrayList basada en la otra ArrayList, haga esto:

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

El resultado será l1 todavía tendrá 2 elementos y l2 tendrá 3 elementos.

Otra forma conveniente de copiar los valores de src ArrayList a dest Arraylist es la siguiente:

 ArrayList src = new ArrayList(); src.add("test string1"); src.add("test string2"); ArrayList dest= new ArrayList(); dest.addAll(src); 

Esta es una copia real de valores y no solo una copia de referencia.

Hay un método addAll () que servirá para copiar One ArrayList a otro.

Por ejemplo, tiene dos listas de arreglos: sourceList y targetList , use el código siguiente.

targetList.addAll (sourceList);

Java no pasa objetos, pasa referencias (punteros) a los objetos. Entonces sí, l2 y l1 son dos indicadores para el mismo objeto.

Debe hacer una copia explícita si necesita dos listas diferentes con los mismos contenidos.