迭代器(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<E> {
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];
}