От 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]);
}
}
}