如何解决在地图上进行迭代时,允许对其进行哪些基本操作?
您可以使用Iterator.remove()
,如果使用(Map.Entry的)entrySet迭代器,则可以使用Map.Entry.setValue()
。其他一切都关闭了-
您不应该直接更改地图,某些地图不允许上述一种或两种方法。
具体来说,您的(1),(2)和(3) 允许的。
您 可能 会通过该Map
对象来设置现有键的值,但是Set.iterator()
文档明确地排除了这一点,它将针对具体实现:
如果在对集合进行迭代时修改了映射(除非通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作),则迭代的 。(添加了重点)
解决方法
假设我正在遍历Java中的Map
…我不清楚在遍历该Map的过程中我可以做什么。我猜我在Javadoc中对于Iterator接口remove方法的警告大多感到困惑:
[…]如果在迭代进行过程中以其他方式(而不是通过调用此方法)修改了基础集合,则未指定迭代器的行为。
我知道我可以毫无问题地调用remove方法。但是,在遍历Map集合时,我可以:
-
使用Map类put方法更改与键关联的值(使用现有键)?
-
使用Map类put方法添加新条目(使用新键)?
-
使用Map类的remove方法删除条目?
我的猜测是我可能可以安全地执行#1(放入现有密钥),但不能安全地执行#2或#3。
预先感谢您对此的任何澄清。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。