Метод copyOf
Метод copyOf класса Map создает
новую неизменяемую карту (unmodifiable map), содержащую все те же
пары ключ-значение, что и исходная карта. В первый параметр мы передаем
исходную карту, которую нужно скопировать. Метод возвращает новый объект,
который не позволяет изменять свое содержимое: попытка добавить,
удалить или изменить элемент приведет к исключению
UnsupportedOperationException. Сама исходная карта при этом
не изменяется. Если переданная карта уже является неизменяемой,
метод может вернуть её же без создания новой копии.
Синтаксис
Map.copyOf(map)
Пример
Давайте создадим изменяемую карту и получим её неизменяемую копию:
import java.util.Map;
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Map<String, Integer> res = Map.copyOf(map);
System.out.println(res);
}
}
Результат выполнения кода:
{a=1, b=2, c=3}
Пример
Давайте убедимся, что полученная копия является неизменяемой, и попробуем добавить в неё новый элемент:
import java.util.Map;
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
Map<String, Integer> res = Map.copyOf(map);
try
{
res.put("c", 3);
}
catch (UnsupportedOperationException e)
{
System.out.println("Cannot modify copyOf map");
}
}
}
Результат выполнения кода:
"Cannot modify copyOf map"
Пример
Давайте проверим, что изменения в исходной карте после создания копии не влияют на саму копию:
import java.util.Map;
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
Map<String, Integer> res = Map.copyOf(map);
map.put("c", 3);
System.out.println("Original: " + map);
System.out.println("Copy: " + res);
}
}
Результат выполнения кода:
"Original: {a=1, b=2, c=3}"
"Copy: {a=1, b=2}"