Home > Java > javaTutorial > How to Avoid ConcurrentModificationException When Adding to an ArrayList?

How to Avoid ConcurrentModificationException When Adding to an ArrayList?

Patricia Arquette
Release: 2024-11-29 17:41:11
Original
231 people have browsed it

How to Avoid ConcurrentModificationException When Adding to an ArrayList?

Concurrent Modification Exception: Adding to an ArrayList

The ConcurrentModificationException is raised when you attempt to modify a collection while iterating over it. This error occurs when you modify the collection by adding or removing elements while traversing it using an Iterator.

Cause of the Exception

In the provided code snippet:

for (Iterator<Element> it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // Code to check and add new elements
}
Copy after login

Within the loop, the code attempts to add new elements to the mElements ArrayList while iterating over it using an Iterator. This triggers the ConcurrentModificationException because the collection is modified during iteration.

Solution 1: Use a Temporary List

To resolve this issue, you can use a temporary list to store the new elements that need to be added to the ArrayList. After finishing the iteration, you can add the elements from the temporary list to the ArrayList.

// Create a new list to store any new elements that need to be added
List<Element> thingsToBeAdded = new ArrayList<>();

// Iterate over the mElements list
for (Iterator<Element> it = mElements.iterator(); it.hasNext();) {
    Element element = it.next();

    // Code to check and mark elements for addition (e.g., set cFlag)

    if (element.cFlag) {
        // Add the new element to the temporary list
        thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY));
        element.cFlag = false;
    }
}

// Add the new elements to the mElements list after finishing the iteration
mElements.addAll(thingsToBeAdded);
Copy after login

Solution 2: Use an Enhanced For-Each Loop

An alternative approach is to use an enhanced for-each loop, which provides a safer way to iterate over a collection. The enhanced for-each loop uses an indirection abstraction to ensure that the collection is not modified during iteration.

for (Element element : mElements) {
    // Code to check and modify elements (e.g., set cFlag)
}
Copy after login

In this case, you would need to update the code that adds new elements separately after the iteration.

The above is the detailed content of How to Avoid ConcurrentModificationException When Adding to an ArrayList?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template