描述
- 定义
Iterator模式用于容器与容器遍历,可以将遍历与现实分离开,在遍历时只需调用迭代器的方法,无需关心具体容器实现类的方法
代码简单实现ArrayList
- Iterator接口定义
hasNext():用户循环终止条件public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
next():放回集合中的元素、
remove():移除集合中的元素 - List接口定义
public interface List<E> { void add(E e); int size(); Iterator<E> iterator(); }
- List实现类ArrayList
public class ArrayList<E> implements List<E> { Object[] objs; private static final int DEFAULT_CAPACITY = 10; private int size = 0; public ArrayList() { objs = new Object[DEFAULT_CAPACITY]; } public void add(E e) { if (size >= objs.length) { Object[] newObjs = new Object[objs.length + DEFAULT_CAPACITY]; System.arraycopy(objs, 0, newObjs, 0, objs.length); objs = newObjs; } objs[size++] = e; } public int size() { return size; } public E remove(int index) { if (index >= size) throw new RuntimeException("index out of bounds"); E oldValue = (E) objs[index]; int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(objs, index + 1, objs, index,numMoved); } objs[--size] = null; return oldValue; } public Iterator<E> iterator() { return new ArrayIterator(); } private class ArrayIterator implements Iterator { int index = 0; public boolean hasNext() { if (index == size) { return false; } return true; } public Object next() { return objs[index++]; } public void remove() { ArrayList.this.remove(index); } } }