De Arraylist à Array

Je veux savoir s’il est prudent de convertir de ArrayList en Array? J’ai un fichier texte avec chaque ligne une chaîne:

1236 1233 4566 4568 .... 

Je veux les lire dans la liste des tableaux, puis je les convertis en tableau. Est-il conseillé / légal de le faire?

Merci

Oui, il est possible de convertir une ArrayList en un Array . Que ce soit une bonne idée dépend de votre utilisation prévue. Avez-vous besoin des opérations fournies par ArrayList ? Si c’est le cas, conservez-le une ArrayList . Sinon, éloignez-vous!

 ArrayList foo = new ArrayList(); foo.add(1); foo.add(1); foo.add(2); foo.add(3); foo.add(5); Integer[] bar = foo.toArray(new Integer[foo.size()]); System.out.println("bar.length = " + bar.length); 

les sorties

 bar.length = 5 

C’est le meilleur moyen (IMHO).

 List myArrayList = new ArrayList(); //..... Ssortingng[] myArray = myArrayList.toArray(new Ssortingng[myArrayList.size()]); 

Ce code fonctionne également:

 Ssortingng[] myArray = myArrayList.toArray(new Ssortingng[0]); 

Mais il est moins efficace: le tableau de chaînes est créé deux fois: le premier tableau de longueur zéro est créé, puis le tableau de taille réelle est créé, rempli et renvoyé. Donc, si vous connaissez la taille requirejse (à partir de list.size() ), vous devez créer un tableau assez grand pour mettre tous les éléments. Dans ce cas, il n’est pas réatsortingbué.

 ArrayList myArrayList = new ArrayList(); ... Ssortingng[] myArray = myArrayList.toArray(new Ssortingng[0]); 

Que ce soit une “bonne idée” dépendrait vraiment de votre cas d’utilisation.

en supposant que v est une ArrayList:

 Ssortingng[] x = (Ssortingng[]) v.toArray(new Ssortingng[0]); 

Il existe deux styles pour convertir une collection en tableau: soit utiliser un tableau c.toArray(new Ssortingng[c.size()]) (comme c.toArray(new Ssortingng[c.size()]) ) soit utiliser un tableau vide (comme c.toArray(new Ssortingng[0]) ). Dans les anciennes versions de Java, il était recommandé d’utiliser un tableau pré-dimensionné, car l’appel de reflection nécessaire pour créer un tableau de taille appropriée était assez lent. Cependant, depuis les dernières mises à jour d’ OpenJDK 6, cet appel était insortingnsèque, rendant les performances de la version du tableau vide identiques et parfois même meilleures, par rapport à la version pré-dimensionnée. Le passage d’un tableau pré-dimensionné est également dangereux pour une collection simultanée ou synchronisée car une course de données est possible entre la taille et l’appel toArray, ce qui peut entraîner des valeurs NULL supplémentaires à la fin du tableau, si la collection a été réduite simultanément. Vous pouvez suivre le style uniforme: soit en utilisant un tableau vide (recommandé dans le Java moderne), soit en utilisant un tableau prédéfini (qui peut être plus rapide dans les anciennes versions de Java ou les JVM non basées sur HotSpot) .

 ArrayList a = new ArrayList(); a.add( "test" ); @SuppressWarnings( "unused") Object[] array = a.toArray(); 

Cela dépend de ce que vous voulez réaliser si vous avez besoin de manipuler le tableau plus tard, cela coûterait plus d’effort que de conserver la chaîne dans ArrayList. Vous avez également un access aléatoire avec une ArrayList par list.get( index );

L’interface Collection inclut la méthode toArray () pour convertir une nouvelle collection en un tableau. Il existe deux formes de cette méthode. La version no argument renverra les éléments de la collection dans un tableau Object: public Object [] toArray (). Le tableau renvoyé ne peut être converti en aucun autre type de données. C’est la version la plus simple. La deuxième version nécessite que vous passiez le type de données du tableau que vous souhaitez renvoyer: public Object [] toArray (type d’object []).

  public static void main(Ssortingng[] args) { List l=new ArrayList(); l.add("A"); l.add("B"); l.add("C"); Object arr[]=l.toArray(); for(Object a:arr) { Ssortingng str=(Ssortingng)a; System.out.println(str); } } 

pour référence, voir ce lien http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html

Une approche consisterait à append la deuxième boucle, où l’impression est effectuée dans la première boucle for. Comme ça:

 static Ssortingng[] SENTENCE; public static void main(Ssortingng []args) throws Exception{ Scanner sentence = new Scanner(new File("assets/blah.txt")); ArrayList sentenceList = new ArrayList(); while (sentence.hasNextLine()) { sentenceList.add(sentence.nextLine()); } sentence.close(); Ssortingng[] sentenceArray = sentenceList.toArray(new Ssortingng[sentenceList.size()]); // System.out.println(sentenceArray.length); for (int r=0;r 
 Ssortingng content = new Ssortingng(Files.readAllBytes(Paths.get("C://temp//temp.txt")), StandardCharsets.UTF_8); List wordsList = Arrays.asList(content.split(System.getProperty("line.separator"))); Stream wordsStream = Stream.of(content.split(System.getProperty("line.separator"))); // The resulting arrays Ssortingng[] wordsArray0 = wordsList.stream().toArray(Ssortingng[]::new); Ssortingng[] wordsArray1 = wordsStream.toArray(Ssortingng[]::new);