当前位置:  开发笔记 > 编程语言 > 正文

迭代时允许在Map上进行哪些基本操作?

如何解决《迭代时允许在Map上进行哪些基本操作?》经验,为你挑选了1个好方法。

假设我正在迭代Java中的Map ...我不清楚在迭代过程中我能对Map进行什么操作.我想我在Javadoc中对Iterator接口删除方法的这个警告大多感到困惑:

[...]如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为.

我确信我可以毫无问题地调用remove方法.但是在迭代Map集合时,我可以:

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

    使用Map类put方法添加一个新条目(使用新密钥放置)?

    使用Map类删除方法删除条目?

我的猜测是我可以安全地做#1(放到现有密钥)但不安全做#2或#3.

提前感谢您对此的任何澄清.



1> Lawrence Dol..:

你可以使用Iterator.remove(),如果使用了一个entrySet迭代器(Map.Entry的),你可以使用Map.Entry.setValue().任何其他和所有投注都是关闭的 - 您不应该直接更改地图,并且某些地图不允许上述方法中的任何一个或两个.

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

可以通过Map对象设置现有密钥的值,但Set.iterator()文档特别排除了这一点,它将是特定于实现的:

如果在对集合进行迭代时修改了映射(除非通过迭代器自己的remove操作,或者通过迭代器返回的映射条目上的setValue操作),迭代的结果是未定义的.(重点补充)

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有