假设我正在迭代Java中的Map ...我不清楚在迭代过程中我能对Map进行什么操作.我想我在Javadoc中对Iterator接口删除方法的这个警告大多感到困惑:
[...]如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为.
我确信我可以毫无问题地调用remove方法.但是在迭代Map集合时,我可以:
使用Map类put方法更改与键关联的值(使用现有键放置)?
使用Map类put方法添加一个新条目(使用新密钥放置)?
使用Map类删除方法删除条目?
我的猜测是我可以安全地做#1(放到现有密钥)但不安全做#2或#3.
提前感谢您对此的任何澄清.
你可以使用Iterator.remove()
,如果使用了一个entrySet迭代器(Map.Entry的),你可以使用Map.Entry.setValue()
.任何其他和所有投注都是关闭的 - 您不应该直接更改地图,并且某些地图不允许上述方法中的任何一个或两个.
具体来说,您的(1),(2)和(3)不允许的.
您可以通过Map
对象设置现有密钥的值,但Set.iterator()
文档特别排除了这一点,它将是特定于实现的:
如果在对集合进行迭代时修改了映射(除非通过迭代器自己的remove操作,或者通过迭代器返回的映射条目上的setValue操作),迭代的结果是未定义的.(重点补充)