Java Language Creazione di una matrice da una raccolta


Esempio

Due metodi in java.util.Collection creano una matrice da una raccolta:

Object[] toArray() può essere utilizzato come segue:

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) può essere utilizzato come segue:

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 differenza tra loro è molto più che avere risultati non tipizzati rispetto a quelli digitati. Anche le loro prestazioni possono differire (per ulteriori dettagli, leggi questa sezione sull'analisi delle prestazioni ):

  • Object[] toArray() usa arraycopy vettorizzato, che è molto più veloce rispetto al arraycopy controllo del arraycopy utilizzato in T[] toArray(T[] a) .
  • T[] toArray(new T[non-zero-size]) bisogno di azzerare l'array durante il runtime, mentre T[] toArray(new T[0]) no. Tale evitamento fa chiamare quest'ultima più veloce della prima. Analisi dettagliata qui: Arrays of Wisdom of the Ancients .
Java SE 8

A partire da Java SE 8+, in cui è stato introdotto il concetto di Stream , è possibile utilizzare il Stream prodotto dalla raccolta per creare un nuovo array utilizzando il metodo Stream.toArray .

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

Esempi presi da due risposte ( 1 , 2 ) alla conversione di 'ArrayList in' String [] 'in Java su Stack Overflow.