1208 votes

Conversion de 'ArrayList<String> en 'String[]' en Java

Comment puis-je convertir un ArrayList<String> à un objet String[] tableau en Java ?

4 votes

Avoir a fait cette réponse avec une approche actualisée avec JDK-11 en introduisant une nouvelle API tout aussi performante pour toArray(T[]) et dont la syntaxe est similaire à celle de Stream.toArray .

1994voto

Bozho Points 273663
List<String> list = ..;
String[] array = list.toArray(new String[0]);

Par exemple :

List<String> list = new ArrayList<String>();
//add some stuff
list.add("android");
list.add("apple");
String[] stringArray = list.toArray(new String[0]);

El toArray() sans passer d'argument renvoie Object[] . Vous devez donc passer un tableau comme argument, qui sera rempli avec les données de la liste, et renvoyé. Vous pouvez également passer un tableau vide, mais vous pouvez aussi passer un tableau avec la taille désirée.

Mise à jour importante : À l'origine, le code ci-dessus utilisait new String[list.size()] . Cependant, ce blogpost révèle qu'en raison des optimisations de la JVM, utiliser new String[0] est mieux maintenant.

0 votes

Il montre cet avertissement dans logcat : Conversion en chaîne de caractères : TypedValue{t=0x12/d=0x0 a=3 r=0x7f050009}

0 votes

@ThorbjørnRavnAndersen : la taille du tableau ne fait aucune différence d'un point de vue fonctionnel, mais si vous le transmettez avec la bonne taille, vous épargnez à la JVM le travail de le redimensionner.

73 votes

Il s'avère que fournir un tableau de longueur nulle, même en le créant et en le jetant, est en moyenne plus rapide que d'allouer un tableau de la bonne taille. Pour des benchmarks et des explications, voir ici : shipilev.net/blog/2016/rays-wisdom-ancients

31voto

Rajesh Vemula Points 87
ArrayList<String> arrayList = new ArrayList<String>();
Object[] objectList = arrayList.toArray();
String[] stringArray =  Arrays.copyOf(objectList,objectList.length,String[].class);

L'utilisation de copyOf, ArrayList vers des tableaux peut également être réalisée.

4 votes

Suggérer des majuscules pour "objectList =..." et "stringArray". De plus, il s'agit de Arrays.copyOf...O majuscule.

1 votes

List.toArray() utilise en interne Arrays.copyOf()

5voto

HZhang Points 115
List <String> list = ...
String[] array = new String[list.size()];
int i=0;
for(String s: list){
  array[i++] = s;
}

13 votes

Cela fonctionne, mais n'est pas super efficace, et duplique la fonctionnalité dans la réponse acceptée avec du code supplémentaire.

-3voto

user3354457 Points 60

En utilisant toArray() de la méthode ArrayList, vous pouvez obtenir 0bject[] . Couler que Object[] a String[] Voici l'exemple de code :

ArrayList<String> arr_List=new ArrayList<String>();
String[] str_Arr=(String[])arr_List.toArray();

-8voto

user2753336 Points 13

C'est suffisant :

int[] d = new int[list.size()];

for (int i = 0; i < list.size(); i++) {
    d[i] = list.get(i);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X