Java集合分析(2):ListIterator
来源:互联网 发布:随机梯度下降算法讲解 编辑:程序博客网 时间:2024/06/08 05:40
上面一篇我们对Iterator进行了分析,接下来我们看看ListIterator。
ListIterator 继承自 Iterator 接口(关于Iterator的介绍 请点这里),在 Iterator 的基础上增加了 6 个方法,下面我们就来看看这几个新增的方法:
void add(E e)
将指定的元素插入列表,插入位置为迭代器当前位置之前(注意:是之前);boolean hasPrevious()
如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false;int nextIndex()
返回迭代器后边元素的索引位置, 初始为 0 ;Object previous()
返回列表中ListIterator指向位置前面的元素, 初始时为 -1;int previousIndex()
返回列表中ListIterator所需位置前面元素的索引;void set(E e)
从列表中将next()或previous()返回的最后一个元素更改为指定元素e,
注意:当没有迭代,也就是没有调用 next() 或者 previous() 直接调用 set 时会报 java.lang.IllegalStateException 错;
ListIterator 有两种获取方式:
List.listIterator()
List.listIterator(int location)
区别在于第二种可以指定游标的位置。
ListIterator用法:
ListIterator的强大之处在于其可以双向移动,还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,还可以使用set()方法替换它访问过的最后一个元素。不过ListIterator只能用于对各种List类的访问,可以通过调用List对象的listIterator()方法产生一个指向List开始索引处的ListIterator,还可以调用listIterator(int)方法产生一个指向List指定索引处的ListIterator.
下面我们来看看ListIterator的用法:
public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); ListIterator<String> iterator = list.listIterator(); // 顺序输出iterator中的元素 while (iterator.hasNext()) { System.out.print(iterator.next() + ""); } // 给iterator添加两个元素 iterator.add("f"); iterator.add("g"); System.out.println(); System.out.println("-----------"); //通过使用ListIterator的特有方法hasPrevious与previous逆序遍历List的元素 //逆序输出 while (iterator.hasPrevious()) { System.out.print(iterator.previous() + ""); } System.out.println(); System.out.println("-----------"); // 从指定位置向前遍历 iterator = list.listIterator(2); while (iterator.hasPrevious()) { System.out.print(iterator.previous() + " "); } System.out.println(); System.out.println("-----------"); iterator = list.listIterator(); //通过使用ListIterator的set方法来替换iterator中的元素 while (iterator.hasNext()) { String str = iterator.next(); iterator.set("替换元素:" + str); } iterator = list.listIterator(); //顺序输出迭代器中的元素 while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } }}
运行结果:
最后我们来看看ListIterator和Iterator的区别:
一.相同点
都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。
二.不同点
1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。
3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
5.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能实现修改。
- Java集合分析(2):ListIterator
- Java 集合源码解析(2):ListIterator
- Java 集合源码解析(2):ListIterator
- Java 集合源码解析(2):ListIterator
- java 集合 ListIterator
- java 集合框架之LinkedList及ListIterator实现源码分析
- java集合之迭代器ListIterator
- [疯狂Java]集合:List、ListIterator
- Java 集合框架listIterator接口
- 集合2 Iterator迭代器 ListIterator
- java集合之列表迭代器ListIterator
- [JAVA] 集合类增删改,Iterator, ListIterator
- java集合系列05 Iterable Iterator ListIterator
- JAVA listiterator
- 集合-ListIterator类
- 集合框架(ListIterator)
- 集合框架--ListIterator接口
- 集合迭代器 listIterator()
- 蓝桥杯--第39级台阶
- cocos2d-x之写自己三国手游(一)
- java Future用法和意义一句话击破
- easyUI学习笔记_基础
- python常见error排错汇总
- Java集合分析(2):ListIterator
- c语言打印调用栈
- MySQL的时间和日期函数
- Coursera 斯坦福 算法课 Course 1 Week 1
- PyQt5学习教程1:最简单的窗体
- 观察者模式
- SSL2780 2017年10月20日提高T2 收银员(dp)
- An Intuitive Explanation of Convolutional Neural Networks
- STL之heap堆的应用