提供一種方法順序的訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示數組
一、Collection:抽象集合接口
二、Iterator:抽象迭代器接口
三、Arraylist、HashSet:具體集合類,經過iterator()返回具體的迭代器對象
四、ArrayIterator、HashIterator:具體的迭代器ide
public interface Collection<E> { public void add(E o); int size(); Iterator_ iterator(); }
/** * 相比與數組,這個容器不用考慮邊界問題,能夠動態擴展 */ public class Arraylist_<E> implements Collection<E> { E[] objects = (E[])new Object[10]; //objects中下一個空的位置在哪兒,或者說目前容器中有多少個元素 private int index = 0; public void add(E o) { if(index == objects.length){ E[] newObjects = (E[])new Object[objects.length * 2]; System.arraycopy(objects,0,newObjects,0,objects.length); objects = newObjects; } objects[index] = o; index++; } public int size(){return index;} @Override public Iterator_ iterator() { return new ArraylistIterator(); } private class ArraylistIterator<E> implements Iterator_<E> { private int currentIndex = 0; @Override public boolean hasNext() { if(currentIndex >= index) { return false; } return true; } @Override public E next() { E o = (E) objects[currentIndex]; currentIndex++; return o; } } }
public interface Iterator_<E> { boolean hasNext(); E next(); }
public class Main { public static void main(String[] args) { Collection<String> list = new Arraylist_<String>(); for(int i = 0; i<15; i++) { list.add(new String("s"+i)); } System.out.println(list.size()); Iterator_<String> it = list.iterator(); while (it.hasNext()){ String o = it.next(); System.out.println(o); } } }