Автор: 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 будут независимы друг от друга.
Теперь давайте посмотрим эти методы в действии: