remove () na lista criada por Arrays.asList () lança UnsupportedOperationException

Eu tenho uma coleção c1 e uma matriz a . Eu estou tentando converter a matriz para uma coleção c2 e c1.removeAll(c2) , mas isso lança UnsupportedOperationException . Descobri que a asList() de Arrays retorna a class Arrays.ArrayList e a class this herda o removeAll() de AbstractList() cuja implementação lança UnsupportedOperationException .

  Myclass la[] = getMyClass(); Collection c = Arrays.asList(la); c.removeAll(thisAllreadyExistingMyClass); 

Existe alguma maneira de remover os elementos? por favor ajude

Arrays.asList retorna um wrapper de List em torno de uma matriz. Esse wrapper tem um tamanho fixo e é suportado diretamente pela matriz e, como tal, as chamadas para set modificarão a matriz e qualquer outro método que modifique a lista lançará uma UnsupportedOperationException .

Para corrigir isso, você precisa criar uma nova lista modificável copiando o conteúdo da lista de wrappers. Isso é fácil de fazer usando o construtor ArrayList que recebe uma Collection :

 Collection c = new ArrayList(Arrays.asList(la)); 

Sim, o Arrays.asList(..) é uma coleção que não pode ser expandida ou reduzida (porque é apoiada pela matriz original e não pode ser redimensionada).

Se você quiser remover elementos, crie um new ArrayList(Arrays.asList(..) ou remova elementos diretamente do array (que será menos eficiente e mais difícil de escrever)

Essa é a maneira que o Array.asList() funciona, porque é diretamente suportado pelo array. Para obter uma lista totalmente modificável, você teria que clonar a coleção em uma coleção criada por você mesmo.

 Collection c = new ArrayList(Arrays.asList(la))