Iterator是怎样遍历Collection的?

迭代器是遍历Collection的工具,不管什么类型的Collection均可以用iterator来遍历。java

我先举个例子:
 工具

package holdings;

import java.util.ArrayList;
import java.util.ListIterator;

/**
 * 测试 ListIterator
 * 
 * @author kfh
 *
 */
public class TestListIterator {
	public static void main(String[] args) {
		ArrayList<String> l = new ArrayList<String>();
		l.add("a");
		l.add("b");
		l.add("c");
		l.add("d");
		l.add("e");
		l.add("f");
		l.add("g");
		l.add("h");
		System.out.println(l);
		ListIterator<String> listIterator = l.listIterator();
		String s1 = listIterator.next();
		System.out.println("s1: " + s1);
		String s2 = listIterator.next();
		System.out.println("s2: " + s2);
		String s1Previous = listIterator.previous();
		System.out.println("s1Pre: " + s1Previous);
		String sPrevious2 = listIterator.previous();
		System.out.println("sPre2: " + sPrevious2);
	}
}

你们能够随便拉到一个项目里跑一下试试,结果是这样的:测试

[a, b, c, d, e, f, g, h]
s1: a
s2: b
s1Pre: b
sPre2: aspa

至于为何是这样的?请往下看:指针

iterator的工做示意图:code

iterator是这样工做的,首先声明的是iterator的cursor指向的是元素之间的间隔位置(如上图所示 Iterator1和Iterator的位置)
当调用iterator.next()时,官方文档是这样写的:
Returns the next element in the list and advances the cursor position.
意思是,返回当前指针的下一个元素,而且推动指针到下一个位置。element

举个例子:
list.iterator()  // cursor处在图中Iterator1的位置
iterator.next() // 返回list的元素1也就是图中的List1, 而后cursor推动一个位置到Iterator2的位置,如此往复进行遍历
如今你们明白了刚刚的例子为何是a,b,b,a了。文档

相关文章
相关标签/搜索