不可修改的Map仍然接受添加条目而不返回UnsupportedOperationException

时间:2013-02-28 00:51:25

标签: java collections map unmodifiable

在尝试向不可修改的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中。

请伸出手,谢谢。

2 个答案:

答案 0 :(得分:4)

  

“尝试修改已退回的有序地图....”

它只会在UnsupportedOperationException来自Map来电的unmodifiableMap(...)上投放Map,该Map不包含原始unmodifiableMap(...)

Map返回的{{1}} 与原始{{1}}相同。

答案 1 :(得分:1)

Collections.unmodifiableMap()返回原始地图的不可修改的视图; 它不会以任何方式更改原始地图。这意味着原始地图仍然可以修改。如果您尝试修改不可修改的视图,则只会出现异常。