• Iterator
  • public interface Iterator<E> {
        boolean hasNext();
        E next();
    }
    public interface Collection<E> {
        Iterator<E> iterator();
    }
    class List<E> implements Collection<E> {
        private class Itr<E> implements Iterator<E> {
            @Override
            public boolean hasNext(){}
            @Override
            public E next(){}
        }
        @Override
        public Iterator iterator(){
            return new Itr();
        }
    }