Как преобразовать arraylist в массив java
Перейти к содержимому

Как преобразовать arraylist в массив java

  • автор:

Переделать ArrayList в обычный массив String[]

Но Eсlipse ругается на ; причем вне зависимости от того как я пытаюсь преобразовать, в этом случае тоже будет ошибка:

String[] url = <>; // ошибка url = linkList.toArray(new String[linkList.size()]); 

В этом варианте нет ошибки:

String[] url = linkList.toArray(new String[linkList.size()]); 

Но если попытаться вывести на консоль, то вместо данных я получаю вот такую ошибку:

Ljava.lang.String;@45ds364

А вот такой вариант крашит программу:

lk.setText("Ссылка: " +url[2]); 

Такой нормально покажет ссылку:

lk.setText("Ссылка: " +linkList.get(2)); 

Соответственно вопрос в чем может быть ошибка и как лучше преобразовать ArrayList в обычный массив.
Отслеживать
1,552 2 2 золотых знака 11 11 серебряных знаков 17 17 бронзовых знаков
задан 7 фев 2014 в 13:54
41 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака

Нижеследующий фрагмент нормально компилится. Может вы что-то недоговариваете? ArrayList linkList = new ArrayList(); String[] url = new String[linkList.size()]; url = linkList.toArray(url); > Но если попытаться вывести на консоль, то вместо данных я получаю вот такую ошибку: > > Ljava.lang.String;@45ds364 Это не ошибка, это нормальное поведение. Метод toString() у массивов не переопределен. если хотите получить строковое представление массива используйте Arrays.deepToString(myArray) > String[] url = <>; // ошибка такого синтаксиса в Java нет вовсе.

7 фев 2014 в 14:07

> А вот такой вариант крашит программу: > > lk.setText(«Ссылка: » +url[2]); Скиньте сюда сообщение об ошибке и стэктрейс, если несложно.

7 фев 2014 в 14:10

02-07 14:33:55.393: E/AndroidRuntime(377): FATAL EXCEPTION: main 02-07 14:33:55.393: E/AndroidRuntime(377): java.lang.ArrayIndexOutOfBoundsException Насколько я понимаю массив просто пуст и при попытке обратиться к несуществующими значению выскакивает ошибка, так как исключения не прописаны. Но если я прав, почему строковый массив пуст тогда как с динамическим все нормально.

7 фев 2014 в 14:44

Вообще наполнение массива идет в отдельном потоке, если преобразовывать внутри этого потока в onPostExecute то показывает последнюю ссылку. В остальных случаях та ошибка, что выше.

Как в Java преобразовать List в массив, и наоборот

Допустим, у нас есть список, и надо его преобразовать в массив. Как это сделать? Возьмем для примера список строк:

List list = new ArrayList<>(); list.add("Petya"); list.add("Vasya");

Мы хотим преобразовать его в массив:

String[] stringArray =

Сделаем это без сторонних библиотек средствами JDK. Начнем с 11 версии, дальше покажу способы на 8 версии, и потом метод с Generics.

Способ № 1 (JDK 11)

Итак, с 11 версии список в массив можно преобразовать вот так изящно:

String[] stringArray = list.toArray(String[]::new);

Способ № 2 (JDK 8)

В 8 версии можно сделать так (внимание, в скобках параметром указываем тип массива, а иначе результирующий массив будет типа Object[]):

String[] stringArray = list.toArray(new String[0]);

Заметьте, что в аргументе можно указать массив нулевой длины, главное, что есть тип. В этом случае будет создан и вернется новый массив нужной длины. Если же список помещается, то вернется тот, что в аргументе.

Способ № 3 с использованием stream() (JDK 8)

String[] stringArray = list.stream().toArray(String[]::new);

Метод для Generics

Допустим, надо написать общий метод для любого типа данных:

private static String[] listToArray(List list)

Проверим, что он работает. Создадим класс:

class Person < private String name; public Person(String name) < this.name = name; >public String toString() < return name; >>
@Test public void m4() < Listlist=new ArrayList<>(); list.add(new Person("Petya")); list.add(new Person("Vasya")); String[] stringArray = listToArray(list); assertThat(stringArray[0], is("Petya")); assertThat(stringArray[1], is("Vasya")); >

Преобразование Array в List

Теперь допустим у нас есть массив строк:

String[] stringArray = new String[];

Массив в List преобразуется так:

List list = Arrays.asList(stringArray);

Но полученный массив — фиксированного размера, в него нельзя добавлять и удалять элементы. Менять же элементы внутри можно, при этом изменения отразятся на массиве. И наоборот.

Чтобы получить обычный List, можно создать новый List на основе предыдущего:

new ArrayList(list);

Также метод не годится для преобразования массива примитивов в список, т.к. возьмет переданный массив в качестве первого объекта.

Преобразование массива примитивов в список List

Для примитивов проще использовать метод стримов boxed():

int[] ar=; List list= Arrays.stream(ar).boxed().toList();

Преобразование List в массив примитивов

List list = .. int[] arrayOfPrimitives = list.stream().mapToInt(i -> i).toArray();

Исходный код

Код примеров доступен на GitHub (в тестах).

Автор sysout Опубликовано 31.12.2019 06.12.2023 Рубрики Core Java

Добавить комментарий Отменить ответ

Прошу прощения: на комментарии временно не отвечаю.

Как преобразовать ArrayList в int[]?

Нужно сформировать массив из чисел, и его точный размер заранее неизвестен (зависит от входных данных, не напрямую). Поэтому применяю ArrayList. Числа — целые, натуральные. Но на выходе мне нужно получить обычный массив из int’ов (примитивный тип). Пока нашёл метод toArray у ArrayList, но не могу понять, как с помощью этого метода преобразовать объект типа ArrayList в массив числе типа int[].
Можно, конечно, воспользоваться циклом, но мне кажется, это не самое лучшее и простое решение + затратно по времени и потребляемой памяти (а на это есть некие ограничения).

  • Вопрос задан более трёх лет назад
  • 6070 просмотров

Комментировать

Решения вопроса 1

evgeniy8705

gleendo @evgeniy8705

Повелитель вселенной

public class App < public static void main(String[] args) < Listlist = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); int[] arr = new int[list.size()]; for (int i = 0; i < list.size(); i++) < arr[i] = list.get(i); >System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9] > >
List list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); Integer[] arr = list.toArray(new Integer[0]);

Ответ написан более трёх лет назад

Кофе-брейк #144. Как преобразовать массив в List (ArrayList) в Java. Внедрение зависимостей в Java

Кофе-брейк #144. Как преобразовать массив в List (ArrayList) в Java. Внедрение зависимостей в Java - 1

Источник: RrtutorsСегодня вы узнаете о различных способах преобразования массива в List (ArrayList) и ознакомитесь с примерами кода в каждом из них.Хотя массивы просты и удобны в использовании, они имеют множество ограничений, например, фиксированный размер. Это затрудняет добавление нового элемента в начале и перестановку элементов. Благодаря Collections Framework мы можем реализовать список (List), набор (Set) и очередь (Queue) различными способами. Например, используя универсальный и гибкий список массивов (ArrayList). При преобразовании массива в Java можно использовать три метода. Эти методы включают в себя:

  1. Наивный или метод грубой силы (Brute Force Method).
  2. Метод Arrays.asList() .
  3. Метод Collections.addAll() .

Использование наивного метода или метода грубой силы

  • Получите массив.
  • Создайте пустой список.
  • Переберите элементы в массиве.
  • Теперь добавьте каждый элемент в массив.
  • Верните полный список.
 import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class NaivemethodExample < public static List convertArrayToList(T array[]) < Listlist = new ArrayList<>(); for (T t : array) < list.add(t); >return list; > public static void main(String args[]) < String array[] = < "Mangoes", "Oranges", "berries" >; System.out.println("Array: " + Arrays.toString(array)); List list = convertArrayToList(array); System.out.println("List: " + list); > > 

Java-университет

Метод Arrays.asList()

  • Получите массив.
  • Создайте список, минуя массив в качестве параметра в конструкторе списка.
  • Верните полный список.
 package asList; import java.util.Arrays; import java.util.List; public class asListExample < public static List convertArrayToList(T array[]) < Listlist = Arrays.asList(array); return list; > public static void main(String args[]) < String array[] = < "Mangoes", "Oranges", "berries" >; System.out.println("Array: " + Arrays.toString(array)); List list = convertArrayToList(array); System.out.println("List: " + list); > > 

Метод Collections.addAll()

  • Получаем массив.
  • Создаем пустой список.
  • Преобразуем массив в список с помощью метода collections.addAll() .
  • Возвращаем список.
 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class collectionsall < public static List convertArrayToList(T array[]) < Listlist = new ArrayList<>(); Collections.addAll(list, array); return list; > public static void main(String args[]) < String array[] = < "peas", "tomatoes", "water melons" >; System.out.println("Array: " + Arrays.toString(array)); List list = convertArrayToList(array); System.out.println("List: " + list); > > 

Array: [peas, tomatoes, water melons ] List: [peas, tomatoes, water melons ]

Внедрение зависимостей в Java

Кофе-брейк #144. Как преобразовать массив в List (ArrayList) в Java. Внедрение зависимостей в Java - 2

Источник: MediumВ этой публикации вы узнаете, что такое внедрение зависимостей в Java, где оно применяется и какие преимущества дает разработчику.Внедрение зависимостей (Dependency Injection, DI) — это процесс предоставления внешней зависимости программному компоненту. Внедрение зависимостей направлено на разделение проблем создания объектов и их использования. Принцип внедрения предполагает, что объект или функция, которые хотят использовать данный сервис, не должны знать, как его создавать. Вместо этого принимающий “клиент” (объект или функция) получает свои зависимости от внешнего кода (“инжектора”), о котором он не знает. Вот наглядный пример. Когда класс X использует некоторые функции класса Y, мы говорим, что класс X имеет зависимость от класса Y. Внедрение зависимостей позволяет создавать зависимые объекты вне класса и предоставляет эти объекты классу различными способами. В данном случае создание и привязка зависимых объектов вынесены за пределы класса, который от них зависит. Шаблон внедрения зависимостей включает в себя три типа классов:

  1. Класс обслуживания (Service Class), предоставляющий услуги классу клиента.
  2. Класс клиента (Client Class) — класс, который зависит от класса обслуживания.
  3. Класс инжектора (Injector Class) — класс, который внедряет объект класса обслуживания в класс клиента.

Типы внедрения зависимостей

  1. Внедрение конструктора (Constructor Injection) — при внедрении конструктора инжектор предоставляет услугу (зависимость) через конструктор клиентского класса.
  2. Внедрение сеттера (Setter Injection) — в этом типе внедрения (также известном как внедрение свойства) инжектор предоставляет зависимость через общедоступное свойство клиентского класса.
  3. Внедрение метода (Method Injection) — в этом типе внедрения клиентский класс реализует интерфейс, который объявляет метод(ы) для предоставления зависимости. Инжектор использует этот интерфейс для предоставления зависимости клиентскому классу.

Преимущества внедрения зависимостей

  • Повторное использование кода.
  • Простота рефакторинга.
  • Простота тестирования.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *