Поскольку API не определяет поведение, оно зависит от реализации, т. Е. Оно может варьироваться в зависимости от используемой среды выполнения Java.
Для среды выполнения Sun Java 6 это выглядит так, как будто поведение будет унаследовано от карты, которую вы упаковываете. Это разумное поведение, хотя, как я уже сказал, не гарантируется для всех реализаций.
Правка - контрольный пример для Sun Java 6:
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TestUnmod {
public static void main(String[] args) {
Map<String,String> map = new HashMap();
map.put("a", "a");
map.put("b", "b");
map.put("c", "c");
Map<String,String> unmod = Collections.unmodifiableMap(map);
Iterator<String> it = unmod.values().iterator();
System.out.println(it.next());
map.put("d", "d");
System.out.println(it.next());
}
}
Выход:
b
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$ValueIterator.next(HashMap.java:822)
at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1010)
at TestUnmod.main(TestUnmod.java:18)