在尝试向不可修改的Map添加条目时,JVM在向原始Map的子视图添加条目时捕获UnsupportedOperationException,但JVM不关心直接添加到原始视图,代码说话:
ConcurrentMap<String, Integer> origView= new ConcurrentHashMap<String, Integer>();
Map<String,Integer> subView = Collections.unmodifiableMap(origView);
origView.put("s", 44); // ok
subView.put("p", 77); // java.lang.UnsupportedOperationException
然而,Collections.unmodifiableSortedMap()的文档说:
尝试通过它修改返回的有序地图,无论是直接的 集合视图,或通过其subMap,headMap或tailMap视图,结果 在UnsupportedOperationException中。
请伸出手,谢谢。
答案 0 :(得分:4)
“尝试修改已退回的有序地图....”
它只会在UnsupportedOperationException
来自Map
来电的unmodifiableMap(...)
上投放Map
,该Map
不包含原始unmodifiableMap(...)
。
从Map
返回的{{1}} 不与原始{{1}}相同。
答案 1 :(得分:1)
Collections.unmodifiableMap()
返回原始地图的不可修改的视图; 它不会以任何方式更改原始地图。这意味着原始地图仍然可以修改。如果您尝试修改不可修改的视图,则只会出现异常。