首页 >Java >java教程 >如何在迭代时安全地从 Java 集合中删除元素?

如何在迭代时安全地从 Java 集合中删除元素?

DDD
DDD原创
2024-12-21 01:02:13135浏览

How to Safely Remove Elements from a Java Collection While Iterating?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn