java集合之迭代器ListIterator
来源:互联网 发布:avi封装软件 编辑:程序博客网 时间:2024/05/22 16:46
首先,我们来看一段程序:
public static void main(String[] args){ArrayList<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);for(ListIterator<Integer> iter = list.listIterator();iter.hasNext();){System.out.println(iter.next());System.out.println(iter.next());System.out.println(iter.next());System.out.println(iter.previous());System.out.println(iter.next());System.out.println(iter.next());break;}}
你能写出它的结果吗?
结果是1,2,3,3,3,4.
是不是很奇怪?你心中的结果是不是1,2,3,2,3,4.
其实我们可以看看next()和previous的相关java源码:
private class Itr implements Iterator<E> {/** * Index of element to be returned by subsequent call to next. */int cursor = 0;/** * Index of element returned by most recent call to next or * previous. Reset to -1 if this element is deleted by a call * to remove. */int lastRet = -1;
根据解释,cursor表示下一个待访问的位置,lastRet表示最近访问过的位置。
public E next() { checkForComodification(); try {E next = get(cursor);lastRet = cursor++;return next; } catch (IndexOutOfBoundsException e) {checkForComodification();throw new NoSuchElementException(); }}在调用next方法时,先得到cursor处的值,然后lastRet=cursor,返回cursor处的值。也就是说在返回当前值得时候,cursor已经走到下一个位置了。
public E previous() { checkForComodification(); try { int i = cursor - 1; E previous = get(i); lastRet = cursor = i; return previous; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } }在调用previous方法时,先将cursor-1赋值给i,然后得到i处的值,继而将i给cursor及lastRet,最后返回i处的值。也就是说在调用previous时,先将cursor-1,然后将lastRet赋值cursor-1,再返回cursor处的值。和next()不同的是,next是先取值再加1,previous()是先减1,再取值。
看到这里,我们就不难得出结果了,自己动手画画吧!
0 0
- java集合之迭代器ListIterator
- java集合之列表迭代器ListIterator
- java 集合 ListIterator
- 集合迭代器 listIterator()
- ListIterator listIterator():List集合特有的迭代器
- java 集合框架之LinkedList及ListIterator实现源码分析
- [疯狂Java]集合:List、ListIterator
- Java 集合框架listIterator接口
- Java集合分析(2):ListIterator
- List集合特有迭代器ListIterator
- 集合2 Iterator迭代器 ListIterator
- java集合中list集合基本用法及List集合特有的迭代器ListIterator
- Java 集合源码解析(2):ListIterator
- [JAVA] 集合类增删改,Iterator, ListIterator
- java集合系列05 Iterable Iterator ListIterator
- Java 集合源码解析(2):ListIterator
- Java 集合源码解析(2):ListIterator
- List集合特有的迭代器,ListIterator
- linux驱动编程--异步通知与异步I/O
- C++编译器无法捕捉到的8种错误
- @注解_继承映射
- 传感器节点分布图绘制-matlab
- Git入门指南十一:Git branch 分支与合并分支
- java集合之迭代器ListIterator
- NYOJ540 奇怪的排序
- windows程序设计 第九章 ENVIRON.C中的一个问题
- Linux学习(一)--简介
- 欧几里得算法
- C#正则表达式大全
- Linux环境变量的设置和查看方法
- c与lua交互 二
- 在Eclipse中使用SVN