Java Language Creando una matriz de una colección


Ejemplo

Dos métodos en java.util.Collection crean una matriz de una colección:

Object[] toArray() se puede utilizar de la siguiente manera:

Java SE 5
Set<String> set = new HashSet<String>();
set.add("red");
set.add("blue");

// although set is a Set<String>, toArray() returns an Object[] not a String[]
Object[] objectArray = set.toArray();

<T> T[] toArray(T[] a) se puede utilizar de la siguiente manera:

Java SE 5
Set<String> set = new HashSet<String>();
set.add("red");
set.add("blue");

// The array does not need to be created up front with the correct size.
// Only the array type matters. (If the size is wrong, a new array will
// be created with the same type.)
String[] stringArray = set.toArray(new String[0]);  

// If you supply an array of the same size as collection or bigger, it
// will be populated with collection values and returned (new array
// won't be allocated)
String[] stringArray2 = set.toArray(new String[set.size()]);

La diferencia entre ellos es más que tener resultados tipificados frente a los no tipificados. Su rendimiento también puede diferir (para más detalles, lea esta sección de análisis de rendimiento ):

  • Object[] toArray() utiliza una arraycopy vectorizada, que es mucho más rápida que la arraycopy comprobación de arraycopy utilizada en T[] toArray(T[] a) .
  • T[] toArray(new T[non-zero-size]) necesita poner a cero la matriz en el tiempo de ejecución, mientras que T[] toArray(new T[0]) no. Tal evitación hace que la última llamada sea más rápida que la anterior. Análisis detallado aquí: Arrays of Wisdom of the Ancients .
Java SE 8

A partir de Java SE 8+, donde se introdujo el concepto de Stream , es posible utilizar el Stream producido por la colección para crear una nueva matriz utilizando el método Stream.toArray .

String[] strings = list.stream().toArray(String[]::new);

Ejemplos tomados de dos respuestas ( 1 , 2 ) a Convertir 'ArrayList a' String [] 'en Java en desbordamiento de pila.