Home >Java >javaTutorial >Why is it Dangerous to Use `remove()` in Java's foreach Loop When Iterating Collections?
Iteration and Removal in Java Collections: The Dangers of remove() in foreach Loops
Java provides the convenient foreach loop construct for iterating over collections. However, caution must be taken when attempting to remove elements from the collection while iterating using this loop.
Legal Removal Within foreach Loops
While iterating with a foreach loop, the collection being iterated over must not be modified in any way except through the loop's iterator. Calling remove() on the collection directly will result in an unexpected exception.
Using Iterator for Safe Removal
For safe removal of elements during iteration, it is essential to use an Iterator. Its remove() method is designed to handle removals from the underlying collection without causing unexpected behavior.
Voici Java code:
List<String> names = ... Iterator<String> i = names.iterator(); while (i.hasNext()) { String s = i.next(); // Must be called before i.remove() // Do something i.remove(); }
Concurrent Modification Exception
As stated in the Java documentation, "in the face of concurrent modification, the iterator fails quickly and cleanly" by throwing a ConcurrentModificationException. This exception ensures that the iterator identifies and reports the issue during the problematic iteration, rather than causing unpredictable behavior later.
Hidden Iterator in foreach
It is important to note that foreach loops implicitly create an iterator that remains inaccessible to the programmer. Due to this hidden iterator, direct modifications to the collection using remove() while iterating with foreach can lead to unexpected exceptions.
The above is the detailed content of Why is it Dangerous to Use `remove()` in Java's foreach Loop When Iterating Collections?. For more information, please follow other related articles on the PHP Chinese website!