Java List UnsupportedOperationException

1. Overview

In this quick tutorial, we’ll discuss a common Exception that can occur when working with some the API of most List implementations – the UnsupportedOperationException.

java.util.List has more functionality than an ordinary array can support. For instance, with only one built-in method call, it’s possible to check if a specific element is inside the structure. That’s typically why we sometimes need to convert an array to a List or Collection.

For an introduction to the core Java List implementation – the ArrayList – please refer to this article.

2. UnsupportedOperationException

A frequent way in which this error occurs is when we use asList() method from java.util.Arrays:

public static List asList(T... a)

It returns:

  • a fixed-size List as of size of a given array
  • an element of the same type as the one in the original array and it must be an Object
  • elements in the same orderas in original array
  • a list that is serializable and implements RandomAccess

Since T is a varargs, we can pass an array or the items directly as parameters, and the method will create a fixed-size initialized list:

List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

We can also pass an actual array:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);

Since the returned List is a fixed-size List, we can’t add/remove elements.

An attempt to add more elements would cause UnsupportedOperationException:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; 
List<String> flowerList = Arrays.asList(flowers); 
flowerList.add("Celosia");

The root of this Exception is that the returned object doesn’t implement the add() operation since it isn’t the same as java.util.ArrayList.

It’s an ArrayList, from java.util.Arrays.

Another way to obtain the same exception is by trying to remove an element from the obtained list.

On the other hand, there are ways to obtain a mutable List in case we need it.

One of them is to create an ArrayList or any kind of list directly from the result of asList():

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; 
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));

3. Conclusion

In conclusion, it’s important to understand that adding more elements to a list can be problematic for more than just immutable lists.

As always, the full source code of the examples is available over on GitHub.

Related posts:

Java Program to Generate Random Numbers Using Multiply with Carry Method
Spring Cloud Series – The Gateway Pattern
Fixing 401s with CORS Preflights and Spring Security
New in Spring Security OAuth2 – Verify Claims
Practical Java Examples of the Big O Notation
Java Program to Implement LinkedList API
Sử dụng CyclicBarrier trong Java
Java Program to Implement Pairing Heap
Add Multiple Items to an Java ArrayList
Model, ModelMap, and ModelAndView in Spring MVC
Java Program to Implement Sorted Circular Doubly Linked List
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
Java Program to Perform the Sorting Using Counting Sort
Java Program to Implement the Binary Counting Method to Generate Subsets of a Set
Wiring in Spring: @Autowired, @Resource and @Inject
Custom Thread Pools In Java 8 Parallel Streams
Vòng lặp for, while, do-while trong Java
Java Program to Implement Binary Search Tree
Python List
Spring Boot - Logging
Java Program to Implement Binomial Tree
Java Program to Check whether Undirected Graph is Connected using BFS
Java Program to Implement RenderingHints API
Debug a JavaMail Program
Tìm hiểu về Web Service
Java Program to Implement Skew Heap
Java Program to Show the Duality Transformation of Line and Point
Finding the Differences Between Two Lists in Java
Compact Strings in Java 9
Java Program to Check whether Directed Graph is Connected using BFS
A Guide to WatchService in Java NIO2
Java Program to Find the Peak Element of an Array O(n) time (Naive Method)