import java.util.*; // a class for iterating through the alphabet class AlphabetIterator implements Iterator { // keeps track of which one we're on and whether we are uppercase or not private char current; private boolean upper; // starts out on a or A public AlphabetIterator(boolean uppercase) { if (uppercase) { current = 'A'; } else { current = 'a'; } upper = uppercase; } // returns whether we have a next value in the sequence @Override public boolean hasNext() { if (upper) { return current <= 'Z'; } else { return current <= 'z'; } } // returns the next one in the sequence @Override public Character next() { Character val = Character.valueOf(current); current++; return val; } } // this class implements Iterable using the Iterator class Alphabet implements Iterable { private boolean uppercase; public Alphabet(boolean uppercase) { this.uppercase = uppercase; } // returns an iterator public Iterator iterator() { return new AlphabetIterator(uppercase); } } // we can now write code to the iterable interface itself class Algorithms { // this method can be called on ArrayList, LinkedList or Alphabet public static int count(Iterable sequence) { int i = 0; // loop through using the iterator interface Iterator current = sequence.iterator(); while (current.hasNext()) { i++; current.next(); } return i; } } public class IteratorExample { public static void main(String args[]) { // make a capital alphabet Alphabet letters = new Alphabet(true); // count the letters System.out.printf("There are %d items in the alphabet:\n", Algorithms.count(letters)); // the new style for loop also works using iterators under the hood for (Character c : letters) { System.out.println(c); } } }