Conversión de ArrayList a Array en Java: métodos toArray()
Se pueden utilizar los siguientes métodos para convertir ArrayList en Array:
Método 1: usar el método Object[] toArray()
Sintaxis:
public Object[] toArray()
- Está especificado por toArray en la colección de interfaces y en la lista de interfaces.
- Anula toArray en la clase AbstractCollection
- Devuelve una matriz que contiene todos los elementos de esta lista en el orden correcto.
Java
// Java program to demonstrate working of> // Objectp[] toArray()> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Object[] objects = al.toArray();> > // Printing array of objects> > for> (Object obj : objects)> > System.out.print(obj +> ' '> );> > }> }> |
Producción
10 20 30 40
Nota: el método toArray() devuelve una matriz de tipo Objeto(Objeto[]). Necesitamos encasillarlo en Integer antes de usarlo como objetos Integer. Si no encasillamos, obtenemos un error de compilación.
Considere el siguiente ejemplo:
Java
// A Java program to demonstrate that assigning Objects[]> // to Integer[] causes error.> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > // Error: incompatible types: Object[]> > // cannot be converted to Integer[]> > Integer[] objects = al.toArray();> > for> (Integer obj : objects)> > System.out.println(obj);> > }> }> |
Producción:
19: error: incompatible types: Object[] cannot be converted to Integer[] Integer[] objects = al.toArray(); ^ 1 error
Por lo tanto, se recomienda crear una matriz en la que se deben almacenar los elementos de List y pasarla como argumento en el método toArray() para almacenar elementos si es lo suficientemente grande. De lo contrario, se asigna una nueva matriz del mismo tipo para este fin.
Método 2: usar T[] toArray(T[] a)
// Converts a list into an array arr[] and returns same. // If arr[] is not big enough, then a new array of same // type is allocated for this purpose. // T represents generic . public T[] toArray(T[] arr)
Tenga en cuenta que hay un parámetro de matriz y un valor de retorno de matriz. El objetivo principal de la matriz pasada es indicar el tipo de matriz. La matriz devuelta es del mismo tipo que la matriz pasada.
- Si la matriz pasada tiene suficiente espacio, entonces los elementos se almacenan en esta matriz.
- Si la matriz pasada no tiene suficiente espacio, se crea una nueva matriz con el mismo tipo y tamaño de la lista dada.
- Si la matriz pasada tiene más espacio, la matriz primero se llena con elementos de la lista y luego se completan los valores nulos.
Lanza ArrayStoreException si el tipo de tiempo de ejecución de a no es un supertipo del tipo de tiempo de ejecución de cada elemento de esta lista.
Java
// A Java program to convert an ArrayList to arr[]> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Integer[] arr => new> Integer[al.size()];> > arr = al.toArray(arr);> > for> (Integer x : arr)> > System.out.print(x +> ' '> );> > }> }> |
Producción
10 20 30 40
Nota: Si la matriz especificada es nula, arrojará NullpointerException. Vea esto por ejemplo.
Método 3: método manual para convertir ArrayList usando el método get()
Podemos usar este método si no queremos usar Java en el método toArray() integrado. Este es un método manual para copiar todos los elementos de ArrayList al String Array[].
// Returns the element at the specified index in the list. public E get(int index)
Java
// Java program to convert a ArrayList to an array> // using get() in a loop.> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Integer[] arr => new> Integer[al.size()];> > // ArrayList to Array Conversion> > for> (> int> i => 0> ; i arr[i] = al.get(i); for (Integer x : arr) System.out.print(x + ' '); } }> |
Producción
10 20 30 40
Método 4: uso de la API de flujos de colecciones en Java 8 para convertir a una matriz de tipo int primitivo
Podemos usar este método streams() de list y mapToInt() para convertir ArrayList en una matriz de tipo de datos primitivo int.
int[] arr = list.stream().mapToInt(i ->i).toArray();
Java
// Java program to convert a ArrayList to an array> // using streams()> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > // ArrayList to Array Conversion> > int> [] arr = al.stream().mapToInt(i ->i).toArray();> > for> (> int> x : arr)> > System.out.print(x +> ' '> );> > }> }> |
Producción
10 20 30 40