Как преобразовать массив в список и обратно
Короткий ответ
Для изменяемого списка оберните массив в new ArrayList<>(...), а обратно используйте toArray():
void main() {
String[] array = {"red", "green", "blue"};
List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("black");
String[] back = list.toArray(new String[0]);
IO.println(list);
IO.println(back.length);
}Результат:
[red, green, blue, black]
4Только для чтения
List.of(array) создаёт неизменяемую копию — подходит, если список нужен только для чтения:
void main() {
String[] array = {"a", "b"};
List<String> list = List.of(array);
IO.println(list);
}Результат:
[a, b]Arrays.asList — вид на массив
Arrays.asList() не копирует данные: список и массив связаны. Менять элементы можно, а менять размер — нельзя:
void main() {
String[] array = {"a", "b", "c"};
List<String> view = Arrays.asList(array);
view.set(0, "z");
IO.println(array[0]);
}Результат:
zМассив примитивов
Arrays.asList(int[]) не работает так, как ожидается, — для int[] используйте поток:
void main() {
int[] numbers = {3, 1, 2};
List<Integer> list = Arrays.stream(numbers).boxed().toList();
int[] back = list.stream().mapToInt(Integer::intValue).toArray();
IO.println(list);
IO.println(Arrays.toString(back));
}Результат:
[3, 1, 2]
[3, 1, 2]Частая ошибка
Добавить элемент в список из Arrays.asList() или List.of(). Их размер фиксирован:
void main() {
List<String> list = Arrays.asList("a", "b");
list.add("c");
}Результат:
Exception in thread "main" java.lang.UnsupportedOperationExceptionЕсли список нужно менять, создайте копию: new ArrayList<>(Arrays.asList(...)).
Функции из этого ответа
- Arrays.asList() — Возвращает список фиксированного размера, который работает поверх массива.
- List.of() — Создаёт неизменяемый список из перечисленных элементов.
- Collection.toArray() — Копирует элементы коллекции в массив.
- Arrays.stream() — Создаёт поток (stream) из массива — для сумм, фильтров и преобразований.