UnsupportedOperationException when trying to remove from the list returned by Array.asList

exception, java, list

Solution

`Array.asList()` wraps an array in the list interface. The list is still backed by the array. Arrays are a fixed size - they don't support adding or removing elements, so the wrapper can't either.

The docs don't make this as clear as they might, but they do say:

Returns a fixed-size list backed by the specified array.

The "fixed-size" bit should be a hint that you can't add or remove elements :)

Although there are other ways around this (other ways to create a new `ArrayList` from an array) without extra libraries, I'd personally recommend getting hold of the Google Collections Library (or Guava, when it's released). You can then use:

List<Integer> list = Lists.newArrayList(array);

The reason I'm suggesting this is that the GCL is a generally good thing, and well worth using.

As noted in comments, this takes a copy of the array; the list is not backed by the original array, and changes in either collection will not be seen in the other.

Problem

I am using a `List` to hold some data obtained by calling `Array.asList()` method. Then I am trying to remove an element using `myList.Remove(int i)` method. But while I try to do that I am getting an `UnsupportedOperationException`. What would be the reason for this? How should I resolve this problem?

Original source