Removing items from a list while looping over it with for-each often throws ConcurrentModificationException, which confuses many students. Fail-fast iterators throw on purpose so you notice the bug early instead of getting wrong results. When you need to delete while looping, use Iterator.remove or removeIf. In multithreaded code, concurrent collections with fail-safe iterators are the right tool instead.