От Arraylist до Array

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

1236
1233
4566
4568
....

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

спасибо

Ответ 1

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

ArrayList<Integer> foo = new ArrayList<Integer>();
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

Ответ 2

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

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

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

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

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

Ответ 3

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

Будет ли это "хорошая идея" действительно зависеть от вашего варианта использования.

Ответ 4

Предполагая, что v является ArrayList:

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

Ответ 5

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

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

Ответ 6

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

 public static void main(String[] args) {  
           List<String> l=new ArrayList<String>();  
           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

Ответ 7

Один из подходов - добавить 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<String> sentenceList = new ArrayList<String>();

   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<sentenceArray.length;r++)
   {
       SENTENCE = sentenceArray[r].split("(?<=[.!?])\\s*"); //split sentences and store in array 

       for (int i=0;i<SENTENCE.length;i++)
       {
           System.out.println("Sentence " + (i+1) + ": " + SENTENCE[i]);
       }
   }    

}