Differences between Fail-fast and Fail-safe iterators are as
follows:
Fail-fast iterator throws ConcurrentModificationException. But
Fail-safe iterator does not throw this exception.
Fail-fast iterator does not clone the original collection. Fail-safe
iterator creates a copy of the original collection of objects.
A Fail-fast iterator tries to immediately throw Exception when it
encounters failure. A Fail-safe Iterator works on a copy of
collection instead of original collection.