ModifyCollectionInEnhancedForLoop
Modifying a collection while iterating over it in a loop may cause a ConcurrentModificationException to be thrown or lead to undefined behavior.

Severity
WARNING

The problem

From the javadoc for Iterator.remove:

The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method, unless an overriding class has specified a concurrent modification policy.

That is, prefer this:

Iterator<String> it = ids.iterator();
while (it.hasNext()) {
  if (shouldRemove(it.next())) {
    it.remove();
  }
}

to this:

for (String id : ids) {
  if (shouldRemove(id)) {
    ids.remove(id); // will cause a ConcurrentModificationException!
  }
}

TIP: This pattern is simpler with Java 8’s Collection.removeIf:

ids.removeIf(id -> shouldRemove(id));

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("ModifyCollectionInEnhancedForLoop") to the enclosing element.