为什么这会抛出UnsupportedException
?
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
map.put("a", "a value");
Set<String> set=map.keySet();
set.add("b");
}
答案 0 :(得分:3)
Map
接口未定义Set
应返回keySet()
的哪个实现。具体来说,HashMap#keySet()
返回内部类java.util.Map$KeySet
的实例。返回的Set
代表Map
的键,因此添加到它本质上意味着向地图添加一个键。最终,这是JDK开发人员的设计决策,但恕我直言,它是正确的。假设允许这个操作 - 这个操作会做什么?在地图上添加一个指向null
值的键?如果您添加Map
以对值执行某些操作,该怎么办?如何处理这种情况?
答案 1 :(得分:2)
答案在documentation:
返回此地图中包含的键的Set视图。 该集是 由地图支持,因此对地图的更改将反映在集合和 反之亦然。如果在对集合进行迭代时修改了映射 正在进行中(通过迭代器自己的删除操作除外), 迭代的结果是未定义的。集支持元素 删除,通过删除从地图中删除相应的映射 迭代器。
remove
,Set.remove
,removeAll
,retainAll
和清除 操作。 它不支持add
或addAll
操作。
解决方案是创建一个新集合,并将结果添加到其中。但是不是从keySet
方法返回的同一组。
答案 2 :(得分:0)
!is.na(ROW)
返回的结果不支持添加元素。它不支持df1 = df[-which(rowSums(!is.na(df))==0),]
操作。它仅支持keySet()
有关详细信息,请阅读this