list в массив java

Автор: cyber_1 ← к списку ← →

Например вы не знаете как отсортировать лист чисел и не хотите писать сортировку для листа, то очень удобно произвести конвертирование с листа в массив, вызвать сортировку для массива, и осталось вернутся обратного к листу. самый очевидный способ использовать циклы, но допустим вам сказали обойтись без циклов и ваших подпрограмм.

Существует ли метод для преобразования такого типа: int[] -> ArrayList . Если да, назовите его.

Такой метод существует, Arrays.asList(T. arr) , только загвоздка в том что он работает для объектов, а если хотите привести int[], от нужно скомбинировать:

правда ArrayUtils — это уже библиотека Apache, если же вы не используете эту библиотеку, вам нужно привести массив чисел к массиву объектов циклом, а в этом случаем луче сразу добавлять элементы в лист.

А если использовать объекты, то все работает все хорошо

Если Вам понравился вопрос, проголосуйте за него

Голосов: 60 Голосовать

Хотя список является более мощным, чем массив в Java, в некоторых случаях мы хотим преобразовать первое в структуру данных последнего. Например, если есть существующий API, где ожидаемым параметром является массив, а у вас есть список.

Если вы оказались в таких ситуациях, вот несколько способов, которые могут помочь преобразовать список в массив на Java.

Преобразовать список в массив с помощью toArray()

Самый простой способ преобразовать список в массив — это использовать встроенный метод toList(). Вот код:

Этот метод не имеет аргумента и возвращает Object Array. Он создаёт новый массив, содержащий все элементы списка. Пример:

Как показано, toArray() возвращает массив объектов. myArray будет иметь 3 элемента — это то же самое, что и исходный список. Следовательно, ниже ожидаемый результат:
Apple
Banana
Orange

Обратите внимание, что тип возвращаемого значения — строго объектный массив. Если мы попытаемся привести результат к другому типу массива (например, массив строк), будет сгенерировано исключение.

И ниже результат, когда код выше выполняется. ClassCastException выдает во время выполнения.
Exception in thread «main» java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at Test.main(Test.java:10)
toArray() должен возвращать «безопасный» массив — это означает, что List не будет ссылаться на элементы возвращаемого массива. Другими словами, если вы измените массив, список не будет затронут. Рассмотрим пример ниже:

Изменение в результате (myArray) не повлияет на исходный список (myList). Следовательно, выходные данные кода будут отображать исходное содержимое списка, как показано ниже:
Apple
Banana
Orange

Конвертировать список в массив с помощью toArray (T [] a)

Если мы хотим, чтобы результат toArray возвращал определенный тип массива (например, массив строк), мы можем передать, какой тип он должен вернуть. Вот синтаксис:
T[] toArray(T[] a)
JavaDoc говорит, что параметр — это «массив, в котором должны храниться элементы этого списка, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа».

Код передает массив String длиной 0. Поскольку элементы не помещаются, создается новый массив Array и возвращается вызывающей стороне.

В качестве альтернативы, мы можем передать массив, достаточно большой, чтобы содержать элементы списка. Вот пример:

Нам даже не нужно присваивать возврат метода toArray переменной. Содержимое хранится в параметре. myArray в этом случае получит значения List. И если мы запустим его, будет отображено следующее:
Apple
Banana
Orange
Подводный камень, который следует учитывать, заключается в том, что мы не можем автоматически преобразовать список определенного типа в массив другого типа с помощью метода toArray. Вот пример кода:

Приведенный выше код создаст исключение ArrayStoreException. Потому что он не может преобразовать список строк в массив целых чисел.

Используем пользовательский код

Можно использовать нашу собственную логику. Этот способ имеет некоторые преимущества. Вот простой пользовательский код для преобразования списка строк в массив строк Java.

В итоге, получаем результат:
Apple
Banana
Orange
Одним из преимуществ использования пользовательского кода является то, что у нас может быть дополнительная логика, не включенная в готовые вспомогательные классы.

Например, если мы хотим преобразовать исходные элементы списка в элементы конечного массива. Вот простой пример:

Как показано, оригинальный список содержит названия фруктов. Результат содержит фразы, которые используют фрукты. Вывод:
This is Apple
This is Banana
This is Orange

Переделать список строк в целочисленный массив

Вот еще один пример пользовательского кода, в котором мы переделаем список строк в массив целых чисел.

Результат показан ниже:
100
200
300

В двойной массив

Аналогично, здесь приведен пример пользовательского кода, который преобразует List of String в массив значений Double.

С использованием потоков в Java 8

Поток Java 8 предлагает очень крутые способы преобразования объектов.

Нажмите на звезду

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Иногда нам нужно преобразовать массив в ArrayList на Java, но как сделать это правильно и эффективно? Сегодня мы будем рассматривать два способа конвертации Array в ArrayList.

Arrays.asList(T… a) — простой и быстрый способ преобразовать массив в ArrayList в Java, но этот метод возвращает исходный массив в виде ArrayList. Результирующий ArrayList будет фиксированного размера и любая попытка изменить в нем что-то приведет к UnsupportedOperationException во время выполнения. Кроме того, любое изменение в массиве также изменит элементы в ArrayList!

Collections.addAll(ArrayList strList, T[] strArr) — лучший способ преобразовать Array в ArrayList, потому что массив данных копируется в список в виде самостоятельного объекта. А это значит, что исходный массив и результирующий ArrayList будут независимы друг от друга.

Теперь давайте посмотрим эти методы в действии:

Оцените статью
SoftLast
Добавить комментарий