Java10 Features - Unmodified Collection API changes
Java 10 Collection API Additions
Java 10 introduced API changes to java.util.List, java.util.Map, and java.util.Set.
A new static factory method, copyOf(collection), was added. It returns an unmodified collection - List, Set, and Map in iteration order.
This blog post covers the API library changes for Collections in Java 10.
static <E> List<E> copyOf(Collection<? extends E> coll)
static <K,V> Map<K,V> copyOf(Map<? extends K,? extends V> map)
static <E> Set<E> copyOf(Collection<? extends E> coll)
What is Unmodified Collection
This is a collection of elements on which mutator methods like add/remove/update will not work as expected, as they throw UnsupportedOperationException. These methods will also throw NullPointerException if the collection is null or any element contains null values. Additionally, this collection allows copying into other collections using a specific method. However, if the original collection is modified, the returned list will not reflect these changes. This is because the method only performs a shallow clone of the collection.
Java.util.list.copyOf(collection) method example
Let’s explore an example of how to clone or copy a separate list from an existing list.
First, we create a list with duplicate elements.
the returned list contains the same order like the order provided a list of the insertion order. It allows duplicate elements.
List<String> stringList = new ArrayList<>();
stringList.add("one");
stringList.add("two");
stringList.add("two");
stringList.add("three");
List<String> newStringList = List.copyOf(stringList);
newStringList.stream().forEach(System.out::println);
The output of the above code is
one
two
two
three
Java.util.Set.copyOf(collection) method example
We will see the example of How to clone/copy a separate set from the existing list? Created a List with duplicate elements. returned set contains that does not allow duplicate elements. the order is not guaranteed.
List<String> stringList = new ArrayList<>();
stringList.add("one");
stringList.add("two");
stringList.add("two");
stringList.add("three");
Set<String> newStringList = Set.copyOf(stringList);
newStringList.stream().forEach(System.out::println);
The output of the above code execution is
one
three
two
Java.util.Map.copyOf(collection) method example
We will see the example of How to clone/copy a separate Map from the existing Map? Created a Map with duplicate key elements. returned Map contains that does not allow duplicate keys. the order is based on a hashing algorithm.
Map<String, String> mapString = new HashMap<>();
mapString.put("key1","value1");
mapString.put("key2","value2");
mapString.put("key2","value23");
mapString.put("key3","value3");
Map<String, String> newMapString = Map.copyOf(mapString);
System.out.println(newMapString);
The output of the above code execution is
{key3=value3, key1=value1, key2=value23}
copyOf UnsupportedOperationException Exception example
copyOf method returns an unmodified collection, If elements in collections modifieds throw UnsupportedOperationException
import java.util.ArrayList;
import java.util.List;
public class TestInterface {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("one");
stringList.add("two");
stringList.add("two");
stringList.add("three");
modifyCollection(List.copyOf(stringList));
}
public static void modifyCollection(List<String> strings) {
strings.set(0, "newone");
}
}
Output is
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.set(AbstractList.java:136)
at org.cloudhadoop.datetime.TestInterface.modifyCollection(TestInterface.java:49)
at org.cloudhadoop.datetime.TestInterface.main(TestInterface.java:24)
Notes:
- Collections return the unmodified collection. Elements in the collection cannot be added, removed, or modified. If an attempt is made to modify the collection, it throws an
UnsupportedOperationException. - It does not allow null elements or a null collection. Attempting to use null elements will result in a NullPointerException.
- If elements are serialized, the returned Collection is also serialized.
- The order of the returned collection is the same as the provided collection.
- These are static methods, so they should be called using the interface rather than an object.
