Saltar al contenido

Cómo copiar la lista de colecciones de Java

La guía paso a paso o código que hallarás en este post es la resolución más eficiente y efectiva que encontramos a tus dudas o dilema.

Solución:

b tiene un capacidad de 3, pero un Talla de 0. El hecho de que ArrayList tiene algún tipo de capacidad de búfer es un detalle de implementación, no es parte del List interfaz, por lo que Collections.copy(List, List) no lo usa Sería feo que fuera un caso especial. ArrayList.

Como ha indicado MrWiggles, usar el constructor ArrayList que toma una colección es la forma de hacerlo en el ejemplo proporcionado.

Para escenarios más complicados (que bien pueden incluir su código real), puede encontrar útiles las colecciones dentro de Guava.

Vocación

List b = new ArrayList(a);

crea una copia superficial de a dentro de b. Todos los elementos existirán dentro b exactamente en el mismo orden en que estaban dentro a (suponiendo que tuviera una orden).

Del mismo modo, llamar

// note: instantiating with a.size() gives `b` enough capacity to hold everything
List b = new ArrayList(a.size());
Collections.copy(b, a);

también crea una copia superficial de a dentro de b. Si el primer parámetro, bno tiene suficiente capacidad (no tamaño) para contener todos aelementos de , entonces lanzará un IndexOutOfBoundsException. La expectativa es que no se requerirán asignaciones por Collections.copy para trabajar, y si hay alguno, lanza esa excepción. Es una optimización requerir que la colección copiada sea preasignada (b), pero generalmente no creo que la función valga la pena debido a las comprobaciones necesarias dadas las alternativas basadas en constructores como la que se muestra arriba que no tienen efectos secundarios extraños.

Para crear una copia profunda, el List, a través de cualquiera de los mecanismos, tendría que tener un conocimiento complejo del tipo subyacente. En el caso de Strings, que son inmutables en Java (y .NET para el caso), ni siquiera necesita una copia profunda. En el caso de MySpecialObjectnecesitas saber cómo hacer una copia profunda de él y eso no es una operación genérica.


Nota: La respuesta originalmente aceptada fue el resultado principal para Collections.copy en Google, y fue completamente incorrecto como se señaló en los comentarios.

Solo haz:

List a = new ArrayList(); 
a.add("a"); 
a.add("b"); 
a.add("c"); 
List b = new ArrayList(a);

ArrayList tiene un constructor que aceptará otra Colección para copiar los elementos de

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *