1. What is the difference between the two?
Little. The design for each loop actually relies on an iterator behind the curtains.
Further reading:
2. Any advantage if I choose one of them?
Mostly readability I would suggest.
( iterator.remove(), , , Iterator.) , Stack, .
, Stack , .
3. ?
for-each, .