迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。
1.调用iterator方法,不同集合返回的迭代器对象 也就是Iterator接口的实现类 会覆盖重写该方法,不同的实现类覆盖重写的是不一样的。调用iterator方法,返回的是Iterator接口的具体的实现类
1.ArrayList的iterator方法返回的迭代器对象是:new Itr()源码:
Itr()是Iterator接口的实现类
源码:
2.LinkedList的iterator方法返回的迭代器对象是:new ListItr()源码:
ListItr()是ListIterator接口的实现类,也是Itr的子类,ListIterator是Iterator的子类。
源码:
Iterator是一个迭代器接口,专门用于迭代器各种Collection集合,包括Set集合和List集合。
以上是List集合的迭代器方法返回对象,下面是Set集合的迭代器返回对象
Set集合的迭代器返回对象:KeyIterator()源码:
说明一下ArrayList的迭代器方法的实现原理:
源码:
private class Itr implements Iterator{ int cursor; // index of next element to return int lastRet = -1; // index of last element returned; -1 if no such int expectedModCount = modCount; // prevent creating a synthetic constructor Itr() {} //Itr这个类是一个成员内部类 public boolean hasNext() { //size是外部类的成员变量 } return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); //elementData是外部类的成员变量 Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; }



