How to Use Collections.unmodifiableList in Java: Simple Guide
Use
Collections.unmodifiableList to create a read-only view of a list in Java. It wraps the original list and throws UnsupportedOperationException if you try to modify it.Syntax
The method Collections.unmodifiableList takes a List as input and returns an unmodifiable view of that list. Any attempt to change the returned list will cause an exception.
List<T> originalList: The list you want to make unmodifiable.Collections.unmodifiableList(originalList): Returns a read-only view oforiginalList.
java
List<T> unmodifiableList = Collections.unmodifiableList(originalList);
Example
This example shows how to create a modifiable list, wrap it with Collections.unmodifiableList, and what happens when you try to modify the unmodifiable list.
java
import java.util.*; public class UnmodifiableListExample { public static void main(String[] args) { List<String> modifiableList = new ArrayList<>(); modifiableList.add("Apple"); modifiableList.add("Banana"); List<String> readOnlyList = Collections.unmodifiableList(modifiableList); System.out.println("Original list: " + modifiableList); System.out.println("Unmodifiable list: " + readOnlyList); // Modifying original list works modifiableList.add("Cherry"); System.out.println("After adding to original list: " + readOnlyList); // Trying to modify unmodifiable list throws exception try { readOnlyList.add("Date"); } catch (UnsupportedOperationException e) { System.out.println("Exception caught: Cannot modify unmodifiable list"); } } }
Output
Original list: [Apple, Banana]
Unmodifiable list: [Apple, Banana]
After adding to original list: [Apple, Banana, Cherry]
Exception caught: Cannot modify unmodifiable list
Common Pitfalls
Modifying the original list affects the unmodifiable list: The unmodifiable list is just a view, so changes to the original list are reflected in it.
Trying to modify the unmodifiable list directly causes an exception: Any add, remove, or clear operation on the unmodifiable list throws UnsupportedOperationException.
To prevent changes completely, avoid modifying the original list after wrapping it.
java
import java.util.*; public class PitfallExample { public static void main(String[] args) { List<String> original = new ArrayList<>(); original.add("One"); List<String> unmodifiable = Collections.unmodifiableList(original); // This works - modifying original list original.add("Two"); System.out.println(unmodifiable); // Prints [One, Two] // This fails - modifying unmodifiable list try { unmodifiable.add("Three"); } catch (UnsupportedOperationException e) { System.out.println("Cannot modify unmodifiable list"); } } }
Output
[One, Two]
Cannot modify unmodifiable list
Quick Reference
- Purpose: Create a read-only view of a list.
- Modification: Throws
UnsupportedOperationExceptionif you try to modify the unmodifiable list. - Original list: Changes to the original list are visible in the unmodifiable list.
- Use case: Protect a list from accidental modification when sharing it.
Key Takeaways
Collections.unmodifiableList creates a read-only view of an existing list.
Modifying the unmodifiable list directly throws UnsupportedOperationException.
Changes to the original list are reflected in the unmodifiable list.
To fully protect the list, avoid modifying the original list after wrapping.
Use unmodifiableList to safely share lists without allowing changes.