Потому что `Arrays.asList(...)` возвращает фиксированного размера список, который является представлением (view) массива и не поддерживает операции изменения размера. При вызове `l.add("c")` бросается `UnsupportedOperationException`. Короткие пояснения: - `Arrays.asList("a","b")` возвращает реализацию `java.util.Arrays$ArrayList`, она backed by массив и её размер равен 222. Операции `add`/`remove` не поддерживаются, а `set` — поддерживается (заменяет элемент). - Исключение: `UnsupportedOperationException`. Способы изменить/получить изменяемый список: 1. Создать изменяемую копию: - `List l = new ArrayList(Arrays.asList("a","b")); l.add("c");` 2. Использовать `Collections.addAll` в новую коллекцию: - `List l = new ArrayList(); Collections.addAll(l, "a","b"); l.add("c");` 3. Через потоки: - `List l = Stream.of("a","b").collect(Collectors.toCollection(ArrayList::new));` 4. Использовать другую реализацию списка сразу: - `List l = new LinkedList(Arrays.asList("a","b"));` 5. Если нужно только заменить элементы (не менять размер): использовать `set`, например `l.set(0, "x")` — это работает для списка от `Arrays.asList`. 6. В Java 9+ можно получать неизменяемые списки через `List.of(...)` — они тоже не поддерживают `add` (только для информации). Чтобы получить изменяемый: `new ArrayList(List.of("a","b"))`. Вывод: для добавления элементов нужно использовать изменяемую реализацию (например `ArrayList`) или создать её копию из результата `Arrays.asList`.
Короткие пояснения:
- `Arrays.asList("a","b")` возвращает реализацию `java.util.Arrays$ArrayList`, она backed by массив и её размер равен 222. Операции `add`/`remove` не поддерживаются, а `set` — поддерживается (заменяет элемент).
- Исключение: `UnsupportedOperationException`.
Способы изменить/получить изменяемый список:
1. Создать изменяемую копию:
- `List l = new ArrayList(Arrays.asList("a","b")); l.add("c");`
2. Использовать `Collections.addAll` в новую коллекцию:
- `List l = new ArrayList(); Collections.addAll(l, "a","b"); l.add("c");`
3. Через потоки:
- `List l = Stream.of("a","b").collect(Collectors.toCollection(ArrayList::new));`
4. Использовать другую реализацию списка сразу:
- `List l = new LinkedList(Arrays.asList("a","b"));`
5. Если нужно только заменить элементы (не менять размер): использовать `set`, например `l.set(0, "x")` — это работает для списка от `Arrays.asList`.
6. В Java 9+ можно получать неизменяемые списки через `List.of(...)` — они тоже не поддерживают `add` (только для информации). Чтобы получить изменяемый: `new ArrayList(List.of("a","b"))`.
Вывод: для добавления элементов нужно использовать изменяемую реализацию (например `ArrayList`) или создать её копию из результата `Arrays.asList`.