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

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

В статье мы рассмотрим самые популярные способы преобразования Java массивов в коллекцию ArrayList.

Первым делом давайте посмотрим на массив, с которым мы будем работать:

Массив каких-то объектов на 3 элемента.

Третье место. Используем метод Collections.addAll()

Посмотрим на примере:

Сначала мы создали пустой список listOfObjects такой же длины, что и массив с исходными данными. Потом используя метод Collections.addAll() добавили все элементы массива arrayOfObjects в коллекцию listOfObjects.

Второе место. Используем метод Arrays.asList()

В этом популярном способе преобразования массива в список будет использован метод Arrays.asList():

Да, это лаконичный и удобный способ, но явно не самый лучший. Все дело в том, что длина списка, который мы получим методом asList() — фиксирована. На самом деле этот список не java.util.ArrayList, а внутренний статический класс, определенный внутри java.util.Arrays. Мы знаем, что этот ArrayList реализован как массив, поэтому метод asList() вернет список фиксированного размера на основании исходного массива. Таким образом, если мы попробуем добавлять или удалять элементы из такого списка, то получим UnsupportedOperationException. Подробнее об этом читайте здесь.

ТОП-1. Конвертируем массив в ArrayList

Наиболее популярным является следующий способ:

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

Мы использовали конструктор ArrayList(Collection < ? extends E > c), который согласно JavaDoc создает список, содержащий элементы указанной коллекции, в том порядке, в котором они были возвращены итератором коллекции. Другими словами, сначала коллекция преобразуется в массив, а затем сохранится во внутреннем массиве elementData. Под капотом это выглядит так:

Как видите, каждый из способов выполняет поставленную перед ним задачу по созданию коллекции ArrayList из массива, но выбирать их нужно с умом.

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

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