ListIterator
列表的迭代器,允许编程者在任一方向上遍历列表,在迭代过程中修改列表,并获取迭代器在列表中的当前位置。ListIterator
不持有当前元素,它的游标位置始终位于previous()
返回的元素与next()
返回的元素之间。 长度为n
列表的迭代器具有n+1
个可能的光标位置,如下面的插入符号(^
)所示:
Element(0) Element(1) Element(2) ... Element(n-1)
cursor positions: ^ ^ ^ ^ ^
注意remove()
和set(E e)
方法不是根据光标位置定义的。它们被定义为对调用next()
或previous()
返回的最后一个元素进行操作。 该接口也是Java集合框架的成员接口。它继承于Iterator
。
注:下文中提到的“前”和“后”定义为:
- 前:索引增大的方向
- 后:索引减小的方向
当按照前进的方向遍历一个数组时,如果当前列表迭代器还有其他元素时返回true
。(换句话说,如果next()
方法能返回一个元素而非抛出一个异常,则返回true
)
返回列表中的下一个元素并向前移动光标位置。 可以重复调用此方法以遍历列表,也可以将其与previous()
混合调用。 (请注意,交替调用next()
和previous()
将重复返回相同的元素。) 当没有下一个元素时抛出NoSuchElementException
。
当反向遍历列表时,如果列表迭代器还有其他元素,则返回true
。(换句话说,当调用previous()
时能返回一个元素而非抛出异常时,返回true
)
返回列表中的前一个元素,并将光标位置向后移动。可以重复调用此方法以向后遍历列表,也可以将其与next()
混合调用。 (请注意,交替调用next()
和previous()
将重复返回相同的元素。) 当没有上一个元素时抛出NoSuchElementException
。
返回下一个元素的索引,也即后续对next()
的调用返回的元素。 (如果列表迭代器位于列表的末尾,则返回列表大小。)
返回上一个元素的索引,也即后续对previous()
调用返回的元素。(如果列表迭代器位于列表的开头,则返回-1
)
从列表中删除next()
或previous()
返回的最后一个元素(可选操作)。每次调用next()
或previous()
时,只能进行一次此调用。仅当在上次调用next()
或previous()
之后没有调用add()
时,才可以进行删除。 当没有调用next()
或者previous()
就调用remove()
方法时或者在最后一次调用next()
或previous()
后已经调用过add()
或remove()
,则抛出IllegalStateException
。
将next()
或previous()
返回的最后一个元素替换为指定的元素(可选操作)。仅在上次调用next()
或previous()
之后没有调用remove()
或add()
的情况下才能进行此调用。 如果指定元素的类阻止将其添加到此列表中,则抛出ClassCastException
。 如果指定元素的某些切面阻止将其添加到此列表中,则抛出IllegalArgumentException
。 当没有调用next()
或者previous()
就调用set()
方法时或者在最后一次调用next()
或previous()
后调用过add()
或remove()
,则抛出IllegalStateException
。
将指定的元素插入列表(可选操作)。该元素将立即插入next()
返回的元素之前(如果有的话)、previous()
返回的元素之后(如果有的话)。 (如果列表不包含任何元素,则新元素将成为列表上的唯一元素。)新元素将插入到游标之前:对next()
的后续调用将不受影响,对previous()
的后续调用将返回新元素。 (此调用使得调用nextIndex()
或previousIndex()
返回的值加一。) 如果指定元素的类阻止将其添加到此列表中,则抛出ClassCastException
。 如果指定元素的某些切面阻止将其添加到此列表中,则抛出IllegalArgumentException
。