Чтобы немного объяснить причину, по которой добавление (и удаление) из ArrayList
, созданного с помощью Arrays.asList (array)
, не разрешено и выдает UnsupportedOperationException
, сначала мы знаем, что это Arrays.asList(...)
делает для преобразованиямассив к его эквивалентному экземпляру ArrayList
:
String[] strArr = new String[]{"a","b","c"};
List<String> strList = Arrays.asList(strArr);
Здесь происходит то, что ваш strArr
на самом деле является резервным массивом для strList
, что означает, что если вы измените strArr[0]
, тогда значение в strList.get(0)
также последует примеру, и наоборот.Да, их значения будут синхронизированы и останутся согласованными друг с другом.Вот почему вы не можете делать добавление или удаление для strList
, потому что резервный массив будет плакать и паниковать, поскольку он не сможет выполнить его, поскольку он имеет фиксированную длину (массивы всегда имеют фиксированный размер, как мы знаем, если вам нужно изменить размер массива, вам нужно полностью создать новый массив, изменить размер существующего невозможно);таким образом он выдает UnsupportedOperationException
.
Таким образом, решение, как уже упоминалось @ByeBye, состоит в том, чтобы обернуть его ArrayList
, чтобы он был новым независимым ArrayList
без вспомогательного массива и имел бысвобода делать добавления и удаления.