A class that implements the Iterable interface must have a method, iterator() that returns an Iterator Object for that class instance
public interface Iterable<E> { public Iterator<E> iterator(); }
Java classes Stack<E>, Queue<E>, and LinkedList<E> all implement Iterable<E>
So code to print the elements in any one of these can be exactly the same:
Stack<String> x; // or Queue<String> x; or LinkedList<String> x; ... Iterator<String> p = x.iterator(); while(p.hasNext()) { System.out.println(p.next()); }
Another advantage for a class implementing Iterable is that the 'foreach' style loop can be used. It is implemented by the compiler as the while loop above, but can be written more simply as:
Stack<String> x; // or Queue<String> x; or LinkedList<String> x; ... for(String s: x) { Systme.out.println(s); }