Избранное сообщение

Фетісов В. С. Комп’ютерні технології в тестуванні. Навчально-методичний посібник. 2-ге видання, перероблене та доповнене / Мои публикации

В 10-х годах я принимал участие в программе Европейского Союза Tempus "Освітні вимірювання, адаптовані до стандартів ЄС". В рамк...

Благодаря Интернету количество писателей и поэтов увеличивается в геометрической прогрессии. Поголовье читателей начинает заметно отставать.

понедельник, 26 сентября 2016 г.

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

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

Первым делом давайте посмотрим на массив, с которым мы будем работать:
ObjElement[] array = {new ObjElement(1), new ObjElement(2), new ObjElement(3)};
Массив каких-то объектов на 3 элемента.

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

Посмотрим на примере:
ObjElement[] arrayOfObjects = {new ObjElement(1), new ObjElement(2), new ObjElement(3)};
List<ObjElement> listOfObjects = new ArrayList<ObjElement>(arrayOfObjects.length);
Collections.addAll(listOfObjects, arrayOfObjects);
Сначала мы создали пустой список listOfObjects такой же длины, что и массив с исходными данными. Потом используя метод Collections.addAll() добавили все элементы массива arrayOfObjects в коллекцию listOfObjects.

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

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

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

Наиболее популярным является следующий способ:
ArrayList<ObjElement> arrayList =
                 new ArrayList<ObjElement>(Arrays.asList(arrayOfObjects));
На первый взгляд этот метод мало чем отличается от первых двух, но давайте рассмотрим его подробнее:
Мы использовали конструктор ArrayList(Collection < ? extends E > c), который согласно JavaDoc создает список, содержащий элементы указанной коллекции, в том порядке, в котором они были возвращены итератором коллекции. Другими словами, сначала коллекция преобразуется в массив, а затем сохранится во внутреннем массиве elementData. Под капотом это выглядит так:
public ArrayList(Collection<? extends E> c) {
       elementData = c.toArray();
       size = elementData.length;
       // здесь Java проводит "магию" по сохранению данных как части ArrayList
       if (elementData.getClass() != Object[].class)
             elementData = Arrays.copyOf(elementData, size, Object[].class);
}
Как видите, каждый из способов выполняет поставленную перед ним задачу по созданию коллекции ArrayList из массива, но выбирать их нужно с умом.

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

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