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

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.

Leave a Comment