В чем разница new ArrayList<>(Arrays.asList(s)); и Arrays.asList(s);

` 
 List<String> list = new ArrayList<>(Arrays.asList(s));
//Этот код работает: 
 list.add("two");

 List<String> list = Arrays.asList(s);
//Этот выбрасывает java.lang.UnsupportedOperationException
 list.add("two");`

Ответы (1 шт):

Автор решения: ЮрийСПб

Вот тут хорошо описано: https://javarush.ru/groups/posts/855-10-oshibok-zachastuju-dopuskaemihkh-java-razrabotchikami

Преобразование массива в ArrayList.

Для преобразования массива в ArrayList, разработчики часто используют такой способ:

List<String> list = Arrays.asList(arr);

Arrays.asList() вернет объект класса ArrayList который является внутренним приватным статическим классом (private static class) класса Arrays, а это не класс java.util.ArrayList. Класс java.util.Arrays.ArrayList содержит методы set(), get(), contains(), но не содержит никаких методов для добавления элементов, его размер фиксирован. Для создания настоящего java.util.ArrayList следует сделать так:

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

Конструктор класса java.util.ArrayList может принимать в качестве параметра все объекты реализующие интерфейс Collection, реализацию которого унаследовал и класс java.util.Arrays.ArrayList

(private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable).
→ Ссылка