今天来聊一聊迭代器的实现原理,我们首先要搞明白迭代器是什么,它的用途和实现方式。
迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。迭代器的作用是用来访问容器(用来保存元素的数据结构)中的元素,所以使用迭代器,我们就可以访问容器中里面的元素。
Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。这个方法在调用时不需要任何参数,它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。
Iterator接口里面的方法:
- boolean hasNext();
该方法英语判断集合对象是否还有下一个元素,如果已经是最后一个元素则返回false - E next();
把迭代器的指向移到下一个位置,同时,该方法返回下一个元素的引用
Java中的Iterator迭代器,它的底层的功能是非常简单的,并且它只能单向移动的,它的使用方法:首先我们需要定义一个Iterator这个方法,然后返回一个Iterator对象,第一次调用这个Iterator的next方法的时候,它返回序列中的第一个元素,接下来我们需要使用next去获取序列中的下一个元素。我们再使用hasNext这个方法区检查序列中是否还有元素,再使用remove将这个序列返回的新的元素删除。
现在我们来说说它的实现原理。当集合遍历时,首先通过调用集合中的iterator()方法获得迭代器对象,然后使用hasNext()方法判断集合中是否存在下一个元素。如果存在,则调用next()方法将元素取出。否则说明遍历已经到达了集合末尾,停止遍历元素。iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,在调用Iterator的next()方法之前,迭代器的索引位于第一个元素前,不指向任何元素。每调用一次next(),迭代器的索引会指向下一个元素并将该元素返回,直到hasNext()方法返回false,表示到达了集合的末尾,终止对集合的遍历。