От Arraylist до Array

Я хочу знать, безопасно ли / целесообразно конвертировать из ArrayList в Array? У меня есть текстовый файл с каждой строкой строка:

1236 1233 4566 4568 .... 

Я хочу прочитать их в списке массивов, а затем преобразовать их в Array. Целесообразно / законно это сделать?

благодаря

Да, безопасно преобразовать ArrayList в Array . Является ли это хорошей идеей, зависит от вашего предполагаемого использования. Вам нужны операции, которые предоставляет ArrayList ? Если да, сохраните его в ArrayList . Остальное преобразуйте!

 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); 

выходы

 bar.length = 5 

Это лучший способ (ИМХО).

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

Этот код также работает:

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

Но это менее эффективно: строковый массив создается дважды: создается первый массив нулевой длины, затем создается, заполняется и возвращается массив реального размера. Итак, если вы знаете необходимый размер (из list.size() ), вы должны создать массив, который достаточно велик, чтобы поместить все элементы. В этом случае он не перераспределяется.

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

Будь то «хорошая идея», действительно будет зависеть от вашего варианта использования.

если v является ArrayList:

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

Существует два стиля для преобразования коллекции в массив: либо с использованием массива pre-size (например, c.toArray(new String[c.size()]) ) или с использованием пустого массива (например, c.toArray(new String[0]) ). В старых версиях Java рекомендуется использовать массив с предварительным размером, так как звонок отражения, необходимый для создания массива правильного размера, был довольно медленным. Однако с последних обновлений OpenJDK 6 этот вызов был встроен, что делает производительность пустой версии массива одинаковой, а иногда даже лучшей, по сравнению с доразмерной версией. Кроме того, передача предварительно заданного массива опасна для параллельной или синхронизированной коллекции, так как существует расхождение данных между вызовом size и toArray, что может привести к дополнительным нулям в конце массива, если сбор одновременно сокращался во время операции. Вы можете следовать единообразному стилю: либо с использованием пустого массива (который рекомендуется в современной Java), либо с использованием массива с предварительным размером (который может быть быстрее в более старых версиях Java или JVM, не поддерживающих HotSpot) .

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

Это зависит от того, чего вы хотите достичь, если вам понадобится манипулировать массивом позже, это будет стоить больше усилий, чем сохранение строки в ArrayList. У вас также есть произвольный доступ с помощью ArrayList по list.get( index );

Интерфейс Collection включает метод toArray () для преобразования новой коллекции в массив. Существуют две формы этого метода. Версия аргумента no возвращает элементы коллекции в массиве Object: public Object [] toArray (). Возвращенный массив не может быть передан другим типам данных. Это простейшая версия. Вторая версия требует, чтобы вы передали тип данных массива, который хотите вернуть: public Object [] toArray (Тип объекта []).

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

для справки, обратитесь по этой ссылке http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html

Один из подходов – добавить Second for Loop, где печать выполняется внутри первого цикла for. Как это:

 static String[] SENTENCE; public static void main(String []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(); String[] sentenceArray = sentenceList.toArray(new String[sentenceList.size()]); // System.out.println(sentenceArray.length); for (int r=0;r 
 String content = new String(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 String[] wordsArray0 = wordsList.stream().toArray(String[]::new); String[] wordsArray1 = wordsStream.toArray(String[]::new); 
  • Почему class String объявлен окончательным в Java?
  • DocumentListener Java, Как предотвратить пустую строку в JTextBox?
  • В Java, когда я вызываю OutputStream.close (), мне всегда нужно вызывать OutputStream.flush () раньше?
  • CSV-анализ в Java - рабочий пример ..?
  • Параметры tomcat - CATALINA_BASE и CATALINA_HOME
  • Как написать метод compareTo, который сравнивает объекты?
  • Предел времени для ввода
  • Атрибуты AES-NI включены по умолчанию?
  • Парсер JAVA SAX разделяет вызовы на символы ()
  • File.separator или File.pathSeparator
  • Нулевая проверка в усиленном цикле
  • Давайте будем гением компьютера.