根据官方文档介绍, ListIterator 有以下功能:
- 允许我们向前、向后两个方向遍历 List;
- 在遍历时修改 List 的元素;
- 遍历时获取迭代器当前游标所在位置。
注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间
注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间;
比如 集合元素有1、2、3、4、5;
初始游标就在1的前边
当调用next()游标后移一位
调用orevious()游标回到当前位置
遍历完元素后 游标会在最后一个元素的后边
也就是说如果集合长度为N 那么游标的位置就有N+1个
ListIterator 继承自Iterator ,在Iterator 的基础上添加了6个方法
void hasPrevious()
判断游标前面是否有元素;
Object previous()
返回游标前面的元素,同时游标前移一位。游标前没有元素就报 java.util.NoSuchElementException 的错,所以使用前最好判断一下;
int nextIndex()
返回游标后边元素的索引位置,初始为 0 ;遍历 N 个元素结束时为 N;
int previousIndex()
返回游标前面元素的位置,初始时为 -1,同时报 java.util.NoSuchElementException 错;
void add(E)
在游标 前面 插入一个元素
注意,是前面
void set(E)
更新迭代器最后一次操作的元素为 E,也就是更新最后一次调用 next() 或者 previous() 返回 的元素。
注意,当没有迭代,也就是没有调用 next() 或者 previous() 直接调用 set 时会报 java.lang.IllegalStateException 错;
void remove()
删除迭代器最后一次操作的元素,注意事项和 set 一样。
ListIterator 有两种获取方式
- List.listIterator()
- List.listIterator(int location)
区别在于第二种可以指定 游标的所在位置。