在地图上进行迭代时,允许对其进行哪些基本操作?

问题描述

您可以使用Iterator.remove(),如果使用(Map.Entry的)entrySet迭代器,则可以使用Map.Entry.setValue()。其他一切都关闭了- 您不应该直接更改地图,某些地图不允许上述一种或两种方法

具体来说,您的(1),(2)和(3) 允许的。

可能 会通过该Map对象来设置现有键的值,但是Set.iterator()文档明确地排除了这一点,它将针对具体实现:

如果在对集合进行迭代时修改了映射(除非通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作),则迭代的 。(添加了重点)

解决方法

假设我正在遍历Java中的Map
…我不清楚在遍历该Map的过程中我可以做什么。我猜我在Javadoc中对于Iterator接口remove方法的警告大多感到困惑:

[…]如果在迭代进行过程中以其他方式(而不是通过调用此方法)修改了基础集合,则未指定迭代器的行为。

我知道我可以毫无问题地调用remove方法。但是,在遍历Map集合时,我可以:

  1. 使用Map类put方法更改与键关联的值(使用现有键)?

  2. 使用Map类put方法添加新条目(使用新键)?

  3. 使用Map类的remove方法删除条目?

我的猜测是我可能可以安全地执行#1(放入现有密钥),但不能安全地执行#2或#3。

预先感谢您对此的任何澄清。