首页 >Java >java教程 >在 Java For-Each 循环期间删除元素安全吗?如何正确完成?

在 Java For-Each 循环期间删除元素安全吗?如何正确完成?

Barbara Streisand
Barbara Streisand原创
2024-12-28 12:54:09582浏览

Is Removing Elements During a Java For-Each Loop Safe, and How Can It Be Done Correctly?

在迭代过程中从集合中删除元素

在 Java 中,使用 foreach 循环迭代集合时更改集合的内容可能会导致意外的结果行为和异常。问题是在这种情况下是否允许从集合中删除元素。

关于在 foreach 循环中删除元素的合法性,如提供的示例所示:

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}

答案是 yes,在 foreach 循环中删除元素是合法的。但是,必须注意的是,集合的迭代器在删除元素后可能会变得无效,从而可能导致 ConcurrentModificationException。

此外,删除尚未迭代的项目(如第二个示例中所示)是不允许。迭代器的实现可能会也可能不会优雅地处理此类情况。为了避免潜在的问题,请确保在尝试删除任何元素之前迭代所有元素。

使用迭代器进行安全删除

要在迭代期间安全地删除元素,请执行以下操作:建议使用显式 Iterator 对象。迭代器提供对删除过程的直接控制,并确保集合在整个循环中保持有效。

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 For-Each 循环期间删除元素安全吗?如何正确完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

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