Преобразование String[] в ArrayList<String> в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования массива строк String[] в список ArrayList<String>, следует использовать метод Arrays.asList(), а затем создать новый объект ArrayList. Пример кода:

Java
Скопировать код
String[] fruitArray = {"apple", "banana", "cherry"};
ArrayList<String> fruitList = new ArrayList<>(Arrays.asList(fruitArray));

Обратите внимание: Arrays.asList() возвращает список фиксированного размера. Чтобы создать динамичную коллекцию ArrayList, следует использовать этот список при создании нового экземпляра ArrayList.

Кинга Идем в IT: пошаговый план для смены профессии

Разбор преобразования (с лёгким юмором)

Не беспокойтесь, здесь нет магии — только проверенный временем Java. Давайте разберем этот процесс пошагово:

Использование Arrays.asList

Класс Arrays включает в себя удобный метод asList(), позволяющий сформировать список на основе массива:

Java
Скопировать код
String[] fruitArray = {"apple", "banana", "cherry"};
List<String> fruitList = Arrays.asList(fruitArray);
// fruitList.add("mango"); // Будет ошибка! Попытка изменить список приведет к ошибке – это как попытка сделать фруктовый салат без миски.

Преобразование в ArrayList

Список, который возвращает asList(), имеет фиксированный размер. Если вам нужна гибкость, подобная расстегивающимся джинсам, создайте новый ArrayList:

Java
Скопировать код
ArrayList<String> flexibleFruitList = new ArrayList<>(Arrays.asList(fruitArray));

Ускоряем процесс с Collections.addAll()

Вместо ручного перебора элементов, как при поиске ключей в кармане, можно использовать Collections.addAll():

Java
Скопировать код
ArrayList<String> fruitList = new ArrayList<>();
Collections.addAll(fruitList, fruitArray);
// И вот готов наш фруктовый салат со свежими плодами!

Консервативный подход с циклом for

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

Java
Скопировать код
ArrayList<String> fruitList = new ArrayList<>(fruitArray.length); // Задаём начальную емкость, чтобы избежать излишней перестройки внутренней структуры
for(String fruit : fruitArray){
    fruitList.add(fruit + " с лимоном");
}

Элегантное решение через Streams

Stream API из Java 8 позволяет упростить задачу, довольно элегантно добавив некоторую функциональность:

Java
Скопировать код
ArrayList<String> fruitList = Stream.of(fruitArray)
                                    .collect(Collectors.toCollection(ArrayList::new));
// Попробуйте почувствовать разницу, будто фруктовый салат готовил не человек, а робот.

Особенности работы

Ограничения списка фиксированного размера

Не забывайте, что список, возвращаемый методом Arrays.asList(), имеет фиксированный размер. Попытка его модифицировать приведет к выбросу исключения UnsupportedOperationException.

Null-элементы в списке

Если в исходном массиве присутствуют null-элементы, то они также окажутся в ArrayList. Чтобы отфильтровать такие значения, используйте возможности Stream API:

Java
Скопировать код
ArrayList<String> fruitList = Stream.of(fruitArray)
                                    .filter(Objects::nonNull)
                                    .collect(Collectors.toCollection(ArrayList::new));
// Это прекрасный способ убрать непригодные элементы.

Синхронизированный ArrayList

ArrayList, созданный с помощью описанных выше методов, не является потокобезопасным. Если в вашей программе имеется несколько потоков, которые обращаются к списку, следует рассмотреть использование Vector или Collections.synchronizedList().

Визуализация

Представим, что ваш массив String[] — это коробка, где находятся яблоки, бананы и вишни:

Markdown
Скопировать код
📦 Коробка (String[]): [ "apple", "banana", "cherry" ]

Если переложить эти фрукты в ArrayList, это станет схоже с размещением их на фруктовой полке:

Java
Скопировать код
ArrayList<String> fruitRack = new ArrayList<>(Arrays.asList(box));

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

Markdown
Скопировать код
Предыдущее: ➡️ 📦: [ "apple", "banana", "cherry" ]
Теперь: ➡️ 🍎🍌🍒: [ "apple", "banana", "cherry" ] // Теперь с ними можно обращаться по-разному, в отличие от коробки

Полезные материалы

  1. ArrayList (Java Platform SE 8)Официальное руководство по работе с ArrayList в Java.
  2. Arrays (Java Platform SE 8)Стандартная функция Java, предназначенная для преобразования массивов в список.
  3. Effective Java, 3rd Edition (Книга) — Профессиональное руководство по лучшим практикам работы с Java.
  4. Java Generics and Collections (Книга) — Углубленный материал по особенностям и использованию системы типов в Java.
  5. java – Create ArrayList from array (StackOverflow) — Список решений и примеров, подготовленных сообществом.