От Arraylist до Array
Я хочу знать, безопасно ли / целесообразно конвертировать из ArrayList в Array? У меня есть текстовый файл с каждой строкой строка:
1236 1233 4566 4568 ....
Я хочу прочитать их в списке массивов, а затем преобразовать их в Array. Целесообразно / законно это сделать?
благодаря
- Должны ли мы использовать EventQueue.invokeLater для любого обновления графического интерфейса пользователя в настольном приложении Java?
- Если вы вызываете ReleaseStringUTFChars, если GetStringUTFChars вернули копию?
- Как отключить определенное правило checkstyle для определенной строки кода?
- JSF 2 вставляет Spring bean / service с помощью @ManagedProperty и без xml
- Selenium: загрузите файл в Internet Explorer в указанную папку без прямой ссылки, без форм Windows, без AutoIt или Robot
- Поиск неиспользуемых classов в проекте Java Eclipse
- Группировать список объектов по атрибуту: Java
- Проверка подлинности клиента HTTPS на Java
- Как удалить папку с файлами с помощью Java
- Как добавить рабочие дни в текущую дату на Java?
- Hibernate Named Query Order По параметру
- ConcurrentModificationException, несмотря на использование синхронизированного
- Удалить значение Null из массива String в java
Да, безопасно преобразовать 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);