class ElemIterator implements Iterator, Iterable { private MyElem[] data; private idx = 0; public boolean hasNext() { return idx < data.length; } public MyElem next() { return data[idx++]; } public Iterator iterator() { return this; } // ... } void useMySequence(Iterable s) { // do some work by traversing the sequence for (MyElem e : s) { // ... } // do some more work by traversing it again for (MyElem e : s) { // ... } }