En Java, List es una interfaz y las clases de implementación comunes son ArrayList y LinkedList. Cuando necesitamos copiar una Lista, generalmente hay dos métodos: copia superficial y copia profunda. Una copia superficial solo copia las referencias de la Lista, mientras que una copia profunda copia todos los elementos de la Lista. Echemos un vistazo a cómo implementar una copia profunda de List.
Supongamos que tenemos una clase Person con dos propiedades name y age:
csharp
public class Persona { private String nombre; edad interna privada;
public Person(String name, int age) { this.name = name; esta.edad = edad; }
public String getName() { devolver nombre; }
public int getEdad() { edad de retorno; } }
Ahora tenemos una Lista que contiene algunos objetos Persona:
java
import java.util.ArrayList;
importar java.util.List;
clase pública DeepCopyExample { public static void main(String[] args) { List<Person> list = new ArrayList<>(); list.add(nueva Persona("Tom", 18)); list.add(nueva Persona("Jerry", 20)); list.add(nueva Persona("Mike", 22)); System.out.println("Lista original: " + lista); } }
Para implementar una copia profunda de List, puede usar el constructor de java.util.ArrayList:
java
import java.util.ArrayList;
importar java.util.List;
clase pública DeepCopyExample { public static void main(String[] args) { List<Person> list = new ArrayList<>(); list.add(nueva Persona("Tom", 18)); list.add(nueva Persona("Jerry", 20)); list.add(nueva Persona("Mike", 22)); System.out.println("Lista original: " + lista);
// 深拷贝
List<Person> copy = new ArrayList<>(lista);
System.out.println("Copiar lista: " + copiar);
}
}
En el código anterior, usamos el constructor de ArrayList para crear una nueva lista y pasar la lista original como parámetro. La nueva lista así creada es una copia profunda de la lista original.