Iterator
接口是对collection
进行迭代的迭代器,ListIterator
接口是其子接口。它们都是遍历集合的工具。Collection
依赖于Iterator
,其实现类都必须实现iterator()
函数,返回一个Iterator
对象;ListIterator
是专门遍历List
而存在的。
Iterator
Iterator
迭代器包含以下三种方法:
boolean hasNext()
:如果仍有元素可以迭代,则返回 trueE next()
:返回迭代的下一个元素void remove()
:从迭代器指向的 collection 中移除迭代器返回的最后一个元素,每次调用 next 只能调用一次此方法
ListIterator
ListIterator
迭代器包含以下九种方法:
void add(E e)
:将指定的元素插入列表boolean hasNext()
:以正向遍历列表时,如果列表迭代器有多个元素,则返回 trueboolean hasPrevious()
:如果以逆向遍历列表,列表迭代器有多个元素,则返回 trueE next()
:返回列表中的下一个元素int nextIndex()
:返回对 next 的后续调用所返回元素的索引E previous()
:返回列表中的前一个元素int previousIndex()
:返回对 previous 的后续调用所返回元素的索引void remove()
:从列表中移除由 next 或 previous 返回的最后一个元素void set(E e)
:用指定元素替换 next 或 previous 返回的最后一个元素
比较
相同点:都可以对集合中的元素进行遍历
不同点:
- 使用范围不同,
Iterator
可应用于所有的集合,而ListIterator
只能用于List
及其子类型,如List
、ArrayList
、Linke
dList和Vector
等 ListIterator
可通过set()
方法实现对象的修改,而Iterator
不能ListIterator
可通过nextIndex()
或previousIndex()
得到后续调用所返回元素的索引,而Iterator
不能ListIterator
可实现双向遍历,而Iterator
只能顺序向前遍历ListIterator
可通过add()
添加对象,而Iterator
不能
要特别注意的是:长度为n的列表的迭代器有n+1种可能的指针位置,指针位置总是两个位于元素之间
Demo
1 | /** |