作者:-断桥再见-_974_328 | 来源:互联网 | 2022-12-18 15:23
我有一张地图.
Map> parentsMap
当我试图清除值时:
parentsMap.values().clear()
它彻底清除了我的地图.我只能这样做:
parentsMap.forEach((k, v) -> v.clear())
我知道当我们编辑地图的.keySet()时,我们会更改原始地图.但是为什么当我们编辑值()时它对键有影响?
1> Eran..:
这就是Javadoc所说的:
java.util.Map.values()
返回此映射中包含的值的Collection视图.该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然.如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的.该集合支持元素删除,它通过 Iterator.remove,Collection.remove,removeAll,retainAll和clear操作从地图中删除相应的映射.它不支持add或addAll操作.
就像编辑keySet()
修改后备一样,编辑也是Map
如此values()
.
由于您希望clear
对每个单独的List
值应用操作Map
,因此您必须迭代所有值并分别调用clear()
每个值,就像在parentsMap.forEach((k, v) -> v.clear())
调用中一样.你也可以parentsMap.values().forEach(List::clear)
.