3
Map<String,String> map=request.getParameterMap();

^ 是不可修改的地图。

Set s1= map.keySet();
Set s2= map2.keySet();/* another keyset of local map*/

使用s1.retainAll(s2)抛出异常:at java.util.collections$unmodifiablecollection.retainall

这里request.getParameterMap()返回一个不可修改的地图。我尝试创建一个本地地图。但问题仍然存在。提出一些解决方案。

4

2 回答 2

2

Set.retainAll 方法修改了它被调用的集合。假设keySet您不可修改的地图的方法只是对基础地图的看法,它不应该允许修改。您可能想要创建一个新的(可修改的)集合,然后从中删除项目:

Set s1 = new HashSet(map.keySet());
s1.retainAll(s3);
于 2012-05-23T05:00:52.867 回答
0

不允许修改不可修改映射的键集,因为返回的键集也是 unmodifiableSet。您可以从 unmodifiableMap 创建本地地图,然后在本地地图键集上使用 retainAll。

Map map1 = new HashMap();
map1 = Collections.unmodifiableMap(map1);
Map map2 = new HashMap();
Map map3 = new HashMap(map1);
Set s1 = map1.keySet();
Set s2 = map2.keySet();
Set s3 = map3.keySet();
s3.retainAll(s2);
于 2012-05-23T05:01:37.060 回答