以下为一热心网友自己通过匿名类的形式实现Iterator接口,代码如下所示: import java.util.Iterator; public class OurArrayList<E> implements Iterable<E> { private E[] datas; private int size; public OurArrayList() { this(16); } @SuppressWarnings("unchecked") public OurArrayList(int capacity) { datas = (E[]) new Object[capacity]; size = 0; } @SuppressWarnings("unchecked") public void add(int index, E obj) { if (size >= datas.length) { E[] newData = (E[]) new Object[datas.length * 2 + 1]; System.arraycopy(datas, 0, newData, 0, datas.length); datas = newData; } for (int i = size - 1; i >= index; i--) datas[i + 1] = datas[i]; datas[index] = obj; size++; } public E get(int index) { if (index < size) { return (E) datas[index]; } else return null; } public Iterator<E> iterator() { // 实现Iterator接口的匿名内部类 return new Iterator<E>() { int count = 0; public boolean hasNext() { return count < size; } public E next() { return get(count++); } public void remove() { // TODO Auto-generated method stub } }; } } 实际上Jdk也正是通过这样的方式实现Iterator接口的,以下是代码从AbstractList中抽取出来的 private class Itr implements Iterator<E> { /** * Index of element to be returned by subsequent call to next. */ int cursor = 0; /** * Index of element returned by most recent call to next or * previous. Reset to -1 if this element is deleted by a call * to remove. */ int lastRet = -1; /** * The modCount value that the iterator believes that the backing * List should have. If this expectation is violated, the iterator * has detected concurrent modification. */ int expectedModCount = modCount; public boolean hasNext() { return cursor != size(); } public E next() { checkForComodification(); try { E next = get(cursor); lastRet = cursor++; return next; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } public void remove() { if (lastRet == -1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } }