Java Language Création d'un tableau à partir d'une collection


Exemple

Deux méthodes dans java.util.Collection créent un tableau à partir d'une collection:

Object[] toArray() peut être utilisé comme suit:

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) peut être utilisé comme suit:

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 différence entre eux est plus que juste avoir des résultats non typés vs typés. Leurs performances peuvent également différer (pour plus de détails, veuillez lire cette section d'analyse des performances ):

  • Object[] toArray() utilise une arraycopy vectorisée, qui est beaucoup plus rapide que la arraycopy vérifiée par arraycopy utilisée dans T[] toArray(T[] a) .
  • T[] toArray(new T[non-zero-size]) doit mettre à zéro le tableau à l'exécution, alors que T[] toArray(new T[0]) ne le fait pas. Un tel évitement rend le dernier appel plus rapide que le premier. Analyse détaillée ici: tableaux de sagesse des anciens .
Java SE 8

À partir de Java SE 8+, où le concept de Stream a été introduit, il est possible d'utiliser le Stream produit par la collection pour créer un nouveau tableau à l'aide de la méthode Stream.toArray .

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

Exemples pris de deux réponses ( 1 , 2 ) à Convertir 'ArrayList en' String [] 'en Java sur Stack Overflow.