首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合两组时的java.lang.UnsupportedOperationException

组合两组时的java.lang.UnsupportedOperationException
EN

Stack Overflow用户
提问于 2013-11-13 10:03:35
回答 5查看 40.2K关注 0票数 50

我有两个不同的HashMap实例

我想合并两个HashMaps的键集;

代码:

代码语言:javascript
复制
Set<String> mySet = hashMap1.keySet();
mySet.addAll(hashMap2.keySet());

异常:

代码语言:javascript
复制
java.lang.UnsupportedOperationException
    at java.util.AbstractCollection.add(AbstractCollection.java:238)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:322)

我没有收到编译警告或错误。

从java文档来看,这应该是可行的。即使添加的集合也是一个集合:

boolean (Collection c)

如果指定集合中的所有元素尚未出现,则将它们添加到此集合中(可选操作)。如果指定的集合也是一个集合,则addAll操作有效地修改该集合,使其值是两个集合的联合。如果在操作进行期间修改了指定的集合,则此操作的行为将未定义。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-13 10:06:04

如果您查看HashMap#keySet()方法的文档,您将得到您的答案(强调我的)。

返回此映射中包含的键的集合视图。集合由映射支持,因此对映射的更改反映在集合中,反之亦然。如果映射是在集合上的迭代正在进行时被修改的(除非通过迭代器自己的移除操作),则迭代的结果是未定义的。集合支持元素删除,它通过Iterator.remove、Set.remove、removeAll、retainAll和clear操作从映射中删除对应的映射。它不支持添加或addAll操作.

因此,您需要创建一个新集并向其添加所有元素,而不是将元素添加到由Set返回的keySet()中。

票数 59
EN

Stack Overflow用户

发布于 2013-11-13 10:05:45

keySet()的结果不支持向其添加元素。

如果您不是试图修改hashMap1,而是只想要一个包含两个映射键的合并的集合,请尝试:

代码语言:javascript
复制
Set<String> mySet = new HashSet<String>();
mySet.addAll(hashMap1.keySet());
mySet.addAll(hashMap2.keySet());
票数 34
EN

Stack Overflow用户

发布于 2013-11-13 10:06:06

在本质上不支持来自map.keySet()的Set。它只支持删除、removeAll、retainAll和清除操作。

请阅读文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19950771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档