JDK8源码阅读笔记
切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

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

注:下文中提到的“前”和“后”定义为:

  • 前:索引增大的方向
  • 后:索引减小的方向

1. boolean hasNext();

当按照前进的方向遍历一个数组时,如果当前列表迭代器还有其他元素时返回true。(换句话说,如果next()方法能返回一个元素而非抛出一个异常,则返回true

2. E next();

返回列表中的下一个元素并向前移动光标位置。 可以重复调用此方法以遍历列表,也可以将其与previous()混合调用。 (请注意,交替调用next()previous()将重复返回相同的元素。) 当没有下一个元素时抛出NoSuchElementException

3. boolean hasPrevious();

当反向遍历列表时,如果列表迭代器还有其他元素,则返回true。(换句话说,当调用previous()时能返回一个元素而非抛出异常时,返回true

4. E previous();

返回列表中的前一个元素,并将光标位置向后移动。可以重复调用此方法以向后遍历列表,也可以将其与next()混合调用。 (请注意,交替调用next()previous()将重复返回相同的元素。) 当没有上一个元素时抛出NoSuchElementException

5. int nextIndex();

返回下一个元素的索引,也即后续对next()的调用返回的元素。 (如果列表迭代器位于列表的末尾,则返回列表大小。)

6. int previousIndex();

返回上一个元素的索引,也即后续对previous()调用返回的元素。(如果列表迭代器位于列表的开头,则返回-1

7. void remove();

从列表中删除next()previous()返回的最后一个元素(可选操作)。每次调用next()previous()时,只能进行一次此调用。仅当在上次调用next()previous()之后没有调用add()时,才可以进行删除。 当没有调用next()或者previous()就调用remove()方法时或者在最后一次调用next()previous()后已经调用过add()remove(),则抛出IllegalStateException

8. void set(E e);

next()previous()返回的最后一个元素替换为指定的元素(可选操作)。仅在上次调用next()previous()之后没有调用remove()add()的情况下才能进行此调用。 如果指定元素的类阻止将其添加到此列表中,则抛出ClassCastException。 如果指定元素的某些切面阻止将其添加到此列表中,则抛出IllegalArgumentException。 当没有调用next()或者previous()就调用set()方法时或者在最后一次调用next()previous()后调用过add()remove(),则抛出IllegalStateException

9. void add(E e);

将指定的元素插入列表(可选操作)。该元素将立即插入next()返回的元素之前(如果有的话)、previous()返回的元素之后(如果有的话)。 (如果列表不包含任何元素,则新元素将成为列表上的唯一元素。)新元素将插入到游标之前:对next()的后续调用将不受影响,对previous()的后续调用将返回新元素。 (此调用使得调用nextIndex()previousIndex()返回的值加一。) 如果指定元素的类阻止将其添加到此列表中,则抛出ClassCastException。 如果指定元素的某些切面阻止将其添加到此列表中,则抛出IllegalArgumentException