Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

Для изменяемого списка оберните массив в 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) из массива — для сумм, фильтров и преобразований.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.