fail-fast iterator doesn't CREATE a copy of the collection whereas fail-safe iterator makes a copy of the underlying structure and iteration is done over that snapshot.
fail-fast iterator provides operations like REMOVE, add and set (in case of ListIterator) whereas in case of fail-safe iterators element-changing operations on iterators themselves (remove, set and add) are not supported. These methods throw UnsupportedOperationException.