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。