5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

ТОП-3 способа конвертировать массив в ArrayList. Пример на Java

Содержание

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

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

я использовал Arrays.asList() но поведение (и подпись) как-то изменилось с Java SE 1.4.2 (документы теперь в архиве) к 8 и большинство фрагментов, которые я нашел в интернете, используют поведение 1.4.2.

  • on 1.4.2 возвращает список, содержащий элементы 1, 2, 3
  • на 1.5.0+ возвращает список, содержащий массив спам

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

17 ответов

в вашем примере это потому, что вы не можете иметь список примитивного типа. Другими словами, List не возможно. Вы можете, однако, иметь List .

это работает, как ожидалось.

проблема в том, что varargs был представлен в Java5 и, к сожалению, Arrays.asList() перегружен версией vararg. Так что Arrays.asList(spam) понимается компилятором Java5 как параметр vararg массивов int.

эта проблема объясняется более подробно в эффективном Java 2nd Ed. Глава 7, Пункт 42.

говоря о способе преобразования, это зависит от того, зачем вам нужен ваш List . Если вам нужно просто прочитать данные. ОК, Вот так:

но тогда, если вы делаете что-то вроде этого:

вы получаете java.lang.UnsupportedOperationException . Поэтому для некоторых случаев вам даже нужно это:

первый подход фактически не преобразует массив, но «представляет» его как List . Но массив находится под капотом со всеми его свойствами, такими как фиксированное количество элементов. Пожалуйста, обратите внимание, вы необходимо указать тип при построении ArrayList .

в Java 8 вы можете использовать streams:

кажется, немного поздно, но вот мои два цента. Мы не можем иметь List as int является примитивным типом, поэтому мы можем иметь только List .

Java 8 (int array)

Java 8 и ниже (целочисленный массив)

нужен ArrayList, а не список?

в случае, если мы хотим конкретную реализацию List например ArrayList затем мы можем использовать toCollection as:

почему list21 не может быть структурно модифицированных?

при использовании Arrays.asList размер возвращаемого списка фиксирован, потому что возвращаемый список не java.util.ArrayList , но частный статический класс, определенный внутри java.util.Arrays . Поэтому, если мы добавим или удалим элементы из возвращаемого списка, UnsupportedOperationException будет брошен. Поэтому мы должны пойти с list22 когда мы хотим изменить список. Если у нас есть Java8, то мы также можем пойти с list23 .

для ясности list21 может быть изменен в том смысле, что мы можем вызвать list21.set(index,element) но этот список не может быть структурно изменен, т. е. не может добавлять или удалять элементы из списка. Вы также можете проверить это вопрос.

если мы хотим неизменяемый список, то мы можем обернуть его как:

еще один момент, чтобы отметить, что метод Collections.unmodifiableList возвращает неизменяемое представление указанного списка. Немодифицируемая коллекция представлений-это немодифицируемая коллекция, а также представление резервной коллекции. Заметить что изменения в резервной коллекции все еще могут быть возможны, и если они происходят, они видны через немодифицируемое представление.

у нас может быть действительно неизменяемый список в Java 10.

Java 10 (действительно неизменяемый список) двумя способами:

  1. List.copyOf(Arrays.asList(integers))
  2. Arrays.stream(integers).collect(Collectors.toUnmodifiableList());

также проверьте это ответ шахты для более.

недавно мне пришлось преобразовать массив в список. Позже программа отфильтровала список, пытаясь удалить данные. При использовании массивов.функция asList(array), вы создаете коллекцию фиксированного размера: вы не можете ни добавлять, ни удалять. Эта запись объясняет проблему лучше, чем я: почему я получаю исключение UnsupportedOperationException при попытке удалить элемент из списка?.

Читать еще:  В Польше нашли самую маленькую собаку в мире.

в конце концов, мне пришлось сделать «ручное» преобразование:

I предположим, я мог бы добавить преобразование из массива в список, используя список.операция addAll (items).

Использование Массивов

это самый простой способ преобразовать массив в List . Однако при попытке добавить новый элемент или удалить существующий элемент из списка, UnsupportedOperationException будет брошен.

использование ArrayList или других реализаций списка

можно использовать for цикл для добавления всех элементов массива в List реализации, например, ArrayList :

использование Stream API в Java 8

вы можно превратить массив в поток, а затем собрать поток с помощью разных коллекторов: коллектор по умолчанию в Java 8 использует ArrayList за экраном, но вы также можете наложить предпочтительную реализацию.

если вы нацелены на Java 8( или более поздней версии), вы можете попробовать следующее:

обратите внимание Collectors. toList() , этот общий метод поможет вам избежать ошибки » тип несоответствия: не удается преобразовать из List to List «.

другой обходной путь, если вы используете Apache commons-lang:

Преобразование массива в массив ArrayList в Java

Массив — это набор элементов, которые могут иметь как примитивные типы данных, так и объекты. Массивы в Java носят статический характер. ArrayLists, с другой стороны, могут хранить элементы только как объекты. ArrayLists в Java, в отличие от массивов, имеют динамический характер. ArrayList — это класс коллекции, представленный в пакете java.util , который реализует интерфейс java.util.List .

Массив можно преобразовать в ArrayList с помощью следующих методов:

    Использование метода ArrayList.add () для ручного добавления элементов массива в ArrayList . Этот метод включает создание нового ArrayList и добавление всех элементов данного массива во вновь созданный ArrayList с помощью метода add ().

Параметры: эта функция принимает 2 обязательных параметра:

  • index — Индекс, в который должен быть вставлен указанный элемент.
  • element — элемент для вставки.

Возвращает: метод не возвращает никакого значения

Исключение (я): метод генерирует исключение IndexOutOfBoundsException, если индекс находится вне диапазона.

// Java-программа для иллюстрации преобразования
// из массива в ArrayList

public static void func1( int arr[])

// Использование метода add () для добавления элементов в array_list

for ( int i = 0 ; i

array_list.add( new Integer(arr[i]));

public static void main(String[] args)

Использование метода Arrays.asList () класса java.utils.Arrays: этот метод преобразует массив в список, а затем передает список в качестве параметра для инициализации нового ArrayList со значениями списка.

Параметры: Метод принимает обязательный параметр T [] a, где a — массив, на который будет опираться список, а T — тип массива.

Returns: метод возвращает представление списка указанного массива.

// Java-программа для иллюстрации преобразования
// из массива в ArrayList

public static void func2(Integer arr[])

// Использование метода Arrays.asList ()

new ArrayList (Arrays.asList(arr));

public static void main(String[] args)

// Вместо этого используются целочисленные объекты

// примитивов для преобразования в список

Использование метода Collections.addAll () класса java.utils.Collections: этот метод принимает ArrayList, в который значения массива должны быть вставлены в качестве первого параметра; и Массив, значения которого должны использоваться в качестве второго параметра. Затем он копирует значения массива в ArrayList.

Параметры: Метод принимает 2 обязательных параметра:

  • c — это коллекция, в которую должны быть вставлены элементы.
  • a — Массив для вставки в c, типа T

Возвращает: метод возвращает значение «истина», если коллекция изменилась в результате вызова, в противном случае «ложь».

Исключение (я): метод бросает

  • UnsupportedOperationException .
  • NullPointerException, если указанная коллекция пуста.
  • IllegalArgumentException, если какой-либо аспект значения в массиве препятствует его добавлению в c.

// Java-программа для иллюстрации преобразования
// из массива в ArrayList

Примеры преобразования списка в массив на Java

Хотя список является более мощным, чем массив в 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 говорит, что параметр — это «массив, в котором должны храниться элементы этого списка, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа».

Читать еще:  Как восстановить Брандмауэр Windows после того, как некоторые вредоносные программы удалили свою службу?

Код передает массив 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 массивы имеют фиксированную длину и не могут быть увеличены или уменьшены. Класс ArrayList реализует интерфейс List и может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

Пример создания объекта ArrayList

Можно инициализировать массив на этапе определения. Созданный объект list содержит свойство size. Обращение к элементам массива осуществляется с помощью метода get(). Пример :

Добавление элемента в массив ArrayList, метод add

Работать с ArrayList просто: необходимо создать объект и вставлять созданные объекты методом add(). Обращение к элементам массива осуществляется с помощью метода get(). Пример:

Замена элемента массива ArrayList, метод set

Чтобы заменить элемент в массиве, нужно использовать метод set() с указанием индекса и новым значением.

Удаление элемента массива ArrayList, метод remove

Для удаления элемента из массива используется метод remove(). Можно удалять по индексу или по объекту:

ПРИМЕЧАНИЕ: элементы, следующие после удалённого элемента, перемещаются на одну позицию ближе к началу. То же самое относится и к операции вставки элемента в середину списка.

Для очистки всего массива используется метод clear():

Определение позиции элемента ArrayList, метод indexOf

В списочном массиве ArrayList существует метод indexOf(), который ищет нужный элемент и возвращает его индекс.

Отсчёт в массиве начинается с 0, если индекс равен 2, значит он является третьим в массиве.

Проверка наличие элемента в ArrayList, метод contains

Чтобы узнать, есть в массиве какой-либо элемент, можно воспользоваться методом contains(), который вернёт логическое значение true или false в зависимости от присутствия элемента в наборе :

Понятно, что в массиве никаких овощей быть не может, поэтому в консоле будет отображено false.

Создание массива из элементов ArrayList, метод toArray

Для конвертирования набора элементов в обычный массив необходимо использовать метод toArray().

Интерфейс List

java.util.List является интерфейсом и его следует использовать вместо ArrayList следующим образом :

Или укороченный вариант для Java 7:

В примере тип ArrayList заменен на List, но в объявлении оставлен new ArrayList(). Всё остальное остаётся без изменений. Это является рекомендуемым способом.

Интерфейс List реализует более общий интерфейс коллекции Collection.

Преобразование массива в список, Arrays

Для создания массива можно не только добавлять по одному объекту через метод add(), но и сразу массив с использованием Arrays.asList(. ).

Пример создания и инициализации массива из объектов Integer.

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

Беспроводная зарядка с подсветкой

Состояние: Новый товар Внимание: ограниченное количество товара в наличии! Описание Беспроводная зарядка Название продукта: Magic Light Array Толщина 15 мм…

Беспроводная зарядка самсунг для авто

40 товаров 60 товаров 100 товаров Новая модель беспроводной зарядки qi в автомобиль 1 200 руб. 2 699 руб. Быстрая…

Беспроводная зарядка через nfc

Часто производители защищённых смартфонов не оснащают свои устройства флагманскими фишками. Компания ioutdoor не стала следовать этому тренду и добавила в…

Беспроводная зарядка йотафон 2

Многих пользователей телефона Yotaphone 2, а также тех кто только хочет купить себе этот гаджет интересует вопрос, встроена ли в…

Читать еще:  Записки о миграции на Java 10

Беспроводная зарядка для телефона и часов samsung

Как зарядить часы Samsung Galaxy от телефона, если ваш смартфон имеет функцию беспроводной зарядки? Сделать это достаточно просто, если вы…

Беспроводная зарядка для планшета самсунг

Код: 991832; разъем на блоке з/у: USB; data-кабель в комплекте; разъем на конце кабеля: microUSB; питание от бытовой сети; сила…

Беспроводная зарядка для редми ноут 5

В последнее время особую популярность набирает технология беспроводной зарядки, которая позволяет заряжать аккумуляторную батарею без необходимости подключать зарядное устройство к…

Беспроводная зарядка xiaomi wireless charger

Данный товар недоступен для доставки в Ваш регион Ваша экономия 53 ₽ Мы всегда стремимся к лучшему, чтобы радовать своих…

Беспроводная зарядка для sony xperia z3

NILLKIN Fast Wireless Charging Stand — быстрая беспроводная зарядка-подставка 1 690 руб. 2 390 руб. Новая модель беспроводной зарядки qi…

Беспроводная зарядка nokia lumia 925

Многих пользователей телефона Nokia Lumia 925, а также тех кто только хочет купить себе этот гаджет интересует вопрос, встроена ли…

Беспроводная зарядка для huawei nova

Оставайтесь на связи Рассылка о новинках и акциях: Спасибо! Вам отправлено письмо для подтверждения подписки. Все, что Вам может понадобиться…

Беспроводная зарядка для телефона сони

Все телефоны Sony с беспроводной зарядкой собраны теперь в одном месте. У компании Sony свои собственные представления о передаче энергии…

Беспроводная гарнитура samsung mg920 инструкция

Языки: Русский Тип: PDF Размер: 5.67 MB Описание: Bluetooth-гарнитура На NoDevice можно скачать инструкцию по эксплуатации для Samsung EO-MG920. Руководство…

Перебор массива в Java. Основные способы перебора массива в Java на примерах

Нередко Java-программисту необходимо реализовать обработку таких наборов данных, как массивы и коллекции. Чаще всего речь идёт о переборе всех значений массива. В этой статье мы поговорим, как это делать стандартным и расширенным способом. И приведём соответствующие примеры.

Чтобы выполнить перебор массива в Java, применяют один из операторов цикла: for, while, do…while. В большинстве случаев используют именно for:

Так как это стандартная операция, разработчики ввели дополнительный формат, обеспечивающий более рациональную и упрощённую реализацию перебора элементов в массиве Java. Эту реализацию можно сравнить с использованием цикла foreach в иных языках программирования. Некоторые называют её формой расширенного цикла for:

Что тут у нас есть: • type – тип внутренней переменной, имеющий имя variable; • variable – внутренняя переменная type-типа, видимая в границах блока фигурных скобок. Она итерационна и сохраняет элементы из набора данных collection; • collection – набор данных, перебираемых в цикле поочерёдно. И вот как раз в качестве набора таких данных может выступать и массив, и коллекция.

Итак, в расширенном цикле for на Java осуществляется последовательный перебор всех элементов массива либо коллекции. При этом число итераций цикла равняется числу элементов в массиве. На каждой итерации значение какого-нибудь элемента массива попадает в итерационную переменную variable, которую вы можете обрабатывать либо использовать. А цикл гарантирует, что произойдёт перебор или прохождение по всему массиву, начиная с первого элемента, заканчивая последним.

Давайте посмотрим, как это выглядит на примере.

Перебор массива чисел в Java

Продемонстрируем расширенный цикл for при обработке одномерного массива чисел типа int. В нашем примере реализован подсчёт количества парных чисел Java-массива:

Перебор массива объектов в Java

Представьте, что у нас есть класс Book, реализующий книгу:

Давайте выполним перебор этого массива объектов, используя расширенный цикл for:

Результат перебора этого массива объектов в Java будет следующим:

Перебор коллекции в Java

Также для примера продемонстрируем, как происходит обработка коллекции типа Integer посредством ArrayList. Как известно, класс нам ArrayList нам нужен для реализации динамического массива, способного увеличиваться либо уменьшаться по мере необходимости. Для использования этого класса следует подключить пакет java.util. Объявление класса ArrayList выглядит следующим образом:

Здесь E – это тип объектов, сохраняемых в массиве. Класс Integer является классом-оберткой над типом int и представляет целочисленные значения. В нашем примере класс ArrayList, обрабатывающий объекты типа Integer, имеет следующий вид:

Теперь давайте посмотрим на использование расширенного цикла for (одна из возможных реализаций):

Плюсы и минусы расширенного цикла for для Java-массивов

Применение расширенного цикла for имеет ряд преимуществ: • повышенная рациональность и упрощённость, если сравнивать со стандартным использованием цикла for; • отпадает необходимость в применении дополнительной переменной цикла, не надо задавать её начальное значение, как и условие завершения цикла; • массив индексировать тоже не нужно; • такой цикл очень удобен при обработке коллекций.

Но есть и недостаток, который связан с тем, что у нас отсутствует доступ к индексу массива. В результате у нас снижается гибкость в оперировании итерационной переменной. А это иногда нужно, допустим, если надо выполнить перебор не всех элементов массива или коллекции. К примеру, в некоторых случаях у программистов возникают задачи по перебору лишь первых n-элементов либо элементов, лежащих на определённых позициях (четных или нечётных). Правда, данный недостаток мы можем обойти, если введём дополнительные переменные-итераторы и проверку соответствующих условий. Тем не менее лучше всего этот способ подходит именно для обычного перебора всех элементов массива в Java.

Хотите знать больше? Приходите на профессиональный курс по Java-программированию в OTUS!

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector