Since the map created by this method is a view of the original map, modifying the original will reflect the changes in it:

package com.logicbig.example.collections;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class UnmodifiableMapExample {
public static void main(String... args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
System.out.println("Original Map: " + map);
Map<Integer, String> map2 = Collections.unmodifiableMap(map);
System.out.println("unmodifiableMap: " + map2);
//modifying the original
map.put(3, "three");
map.put(4, "four");
map.remove(1);
System.out.println("unmodifiableMap: " + map2);
}
}
Output
Original Map: {1=one, 2=two}
unmodifiableMap: {1=one, 2=two}
unmodifiableMap: {2=two, 3=three, 4=four}
JDK 25
Modifying itself will throw the exception:

package com.logicbig.example.collections;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class UnmodifiableMapExample2 {
public static void main(String... args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
Map<Integer, String> map2 = Collections.unmodifiableMap(map);
map2.put(3, "three");
}
}
Output
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.put (Collections.java:1664)
at com.logicbig.example.collections.UnmodifiableMapExample2.main (UnmodifiableMapExample2.java:20)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
at java.lang.reflect.Method.invoke (Method.java:565)
at org.codehaus.mojo.exec.AbstractExecJavaBase.executeMainMethod (AbstractExecJavaBase.java:402)
at org.codehaus.mojo.exec.ExecJavaMojo.executeMainMethod (ExecJavaMojo.java:142)
at org.codehaus.mojo.exec.AbstractExecJavaBase.doExecClassLoader (AbstractExecJavaBase.java:377)
at org.codehaus.mojo.exec.AbstractExecJavaBase.lambda$execute$0 (AbstractExecJavaBase.java:287)
at java.lang.Thread.run (Thread.java:1474)
JDK 25