在 Java 中迭代期间安全删除元素
问:是否允许在使用 foreach 循环迭代集合时从集合中删除元素在 Java 中?
A: 使用 foreach 循环进行删除不是建议。 它可能会导致意外行为,因为底层迭代器未公开且无法直接访问进行修改。
示例:
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
此代码可能会因 java.util 而失败.ConcurrentModificationException,因为在 foreach 循环进行时,删除操作修改了下面的集合。
问:我们可以删除尚未删除的项目吗?已经被迭代了吗?
答:否。 删除循环中尚未处理的元素可能会导致“索引越界”错误。示例:
//Assume that the names list as duplicate entries List<String> names = .... for (String name : names) { // Do something while (names.remove(name)); }
要在迭代时安全地删除元素,应使用迭代器:
List<String> names = .... Iterator<String> i = names.iterator(); while (i.hasNext()) { String s = i.next(); // must be called before you can call i.remove() // Do something i.remove(); }
Java 文档强调,iterator 和 listIterator 方法返回的迭代器是“fail-快速地。”在迭代器的删除或添加方法之外对列表进行的任何结构修改都将导致 ConcurrentModificationException。
以上是如何在迭代时安全地从 Java 集合中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!