Странное UnsupportedOperationException при вызове list.remove (0) - PullRequest
1 голос
/ 31 октября 2011

У меня есть этот метод, который принимает различные строки, создает из него список, а затем пытается удалить первый элемент списка.называется, UnsupportedOperationException брошен.Я предполагаю, что возвращаемый List-Type не поддерживает метод удаления.Я прав?Какие у меня есть альтернативы?

Ответы [ 5 ]

7 голосов
/ 31 октября 2011

Arrays.asList обеспечивает только тонкую оболочку вокруг массива.Эта оболочка позволяет вам выполнять большинство операций над массивом с использованием List API.Цитата из JavaDoc:

Возвращает список фиксированного размера , поддерживаемый указанным массивом.[...] Этот метод действует как мост между API на основе массива и коллекции [...]

Если вы действительно хотите что-то удалить, то это может сработать:

List<String> realList = new ArrayList<String>(Arrays.asList(stringArray));

Этот создает реальный ArrayList (который поддерживает remove) и заполняет его содержимым другого списка, который является оберткой вокруг вашего String[].

4 голосов
/ 31 октября 2011

Arrays.asList обеспечивает представление списка массива, НАЗАД массива. И массивы не могут быть изменены. Любая попытка изменить его размер вызовет исключение.

2 голосов
/ 31 октября 2011

Вы можете просто создать new ArrayList<String>(), а затем перебрать все файлы for (String file : files) fileList.add(file);. Или вы можете использовать список, который вы уже создали, и добавить его в новый ArrayList, используя fileList.addAll(files);

1 голос
/ 31 октября 2011

Arrays.asList() возвращает экземпляр Arrays.ArrayList, который является неизменяемым списком, потому что это простая оболочка над массивом.Вы не можете удалить элементы из массива.

Это записано в javadoc asList():

Возвращает список фиксированного размера, поддерживаемый указанным массивом.

0 голосов
/ 31 октября 2011

Возвращенный список действует как view для массива . Вы не можете изменять список напрямую, но только через резервный массив. Однако вы не можете изменить размер массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...