我有两个不同的HashMap实例
我想合并两个HashMaps的键集;
代码:
Set<String> mySet = hashMap1.keySet();
mySet.addAll(hashMap2.keySet());异常:
java.lang.UnsupportedOperationException
at java.util.AbstractCollection.add(AbstractCollection.java:238)
at java.util.AbstractCollection.addAll(AbstractCollection.java:322)我没有收到编译警告或错误。
从java文档来看,这应该是可行的。即使添加的集合也是一个集合:
boolean (Collection c)
如果指定集合中的所有元素尚未出现,则将它们添加到此集合中(可选操作)。如果指定的集合也是一个集合,则addAll操作有效地修改该集合,使其值是两个集合的联合。如果在操作进行期间修改了指定的集合,则此操作的行为将未定义。
发布于 2013-11-13 10:06:04
如果您查看HashMap#keySet()方法的文档,您将得到您的答案(强调我的)。
返回此映射中包含的键的集合视图。集合由映射支持,因此对映射的更改反映在集合中,反之亦然。如果映射是在集合上的迭代正在进行时被修改的(除非通过迭代器自己的移除操作),则迭代的结果是未定义的。集合支持元素删除,它通过Iterator.remove、Set.remove、removeAll、retainAll和clear操作从映射中删除对应的映射。它不支持添加或addAll操作.
因此,您需要创建一个新集并向其添加所有元素,而不是将元素添加到由Set返回的keySet()中。
发布于 2013-11-13 10:05:45
keySet()的结果不支持向其添加元素。
如果您不是试图修改hashMap1,而是只想要一个包含两个映射键的合并的集合,请尝试:
Set<String> mySet = new HashSet<String>();
mySet.addAll(hashMap1.keySet());
mySet.addAll(hashMap2.keySet());发布于 2013-11-13 10:06:06
在本质上不支持来自map.keySet()的Set。它只支持删除、removeAll、retainAll和清除操作。
请阅读文档
https://stackoverflow.com/questions/19950771
复制相似问题