java中Iterator与ListIterator以及其两者的区别
硅谷探秘者
2021-04-19发表
算法基础
0
0
1249
Iterator主要方法
hasNext():如果迭代器中还有元素,则返回true。
next():返回迭代器中的下一个元素
remove():删除迭代器新返回的元素。
需要注意的是:
(1)Iterator只能单向移动。
(2)Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出一个异常。
ListIterator
ListIterator是一个功能更加强大的, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
主要的方法有:add、hasNext、hasprevious、next、nextIndex、previous、remove、set等。根据源码中的定义,我们可以得出ListIterator可以
- (1)双向移动(向前/向后遍历).
- (2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
- (3)可以使用set()方法替换它访问过的最后一个元素.
- (4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.
Iterator与ListIterator的主要区别总结
- (1)ListIterator有add()方法,可以向List中添加对象,而Iterator不能
- (2)ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
- (3)ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
- (4)都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。