文档章节

Iterator是怎样遍历Collection的?

KongFanhao
 KongFanhao
发布于 2016/10/21 15:40
字数 424
阅读 33
收藏 0

迭代器是遍历Collection的工具,无论什么类型的Collection都可以用iterator来遍历。

我先举个例子:
 

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: a

至于为什么是这样的?请往下看:

iterator的工作示意图:

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

举个例子:
list.iterator()  // cursor处在图中Iterator1的位置
iterator.next() // 返回list的元素1也就是图中的List1, 然后cursor推进一个位置到Iterator2的位置,如此往复进行遍历
现在大家明白了刚刚的例子为什么是a,b,b,a了。

 

© 著作权归作者所有

KongFanhao
粉丝 5
博文 76
码字总数 42265
作品 0
海淀
程序员
私信 提问
Java for-each循环解惑

从Java5起,在Java中有了for-each循环,可以用来循环遍历collection和array。For each循环允许你在无需保持传统for循环中的索引,或在使用iterator /ListIterator时无需调用while循环中的has...

LCZ777
2014/04/24
0
0
java集合框架总结(三)

一:遍历集合的两种方式 1.使用 Iterator 接口遍历集合元素 terator 接口主要用于遍历 Collection 集合中的元素,Iterator 对象也被称为迭代器 Iterator 接口隐藏了各种 Collection 实现类的底...

hapier
2016/09/03
31
0
Collection 和 Map 遍历过程的区别

1:Collection 和 Map 都是Java体系为我们提供的强大集合工具,他们的遍历是最多的操作,那么他们有什么不同呢?请看如下代码 import java.util.ArrayList;import java.util.Collection;imp...

刘付kin
2016/12/07
4
0
(2)集合Collection架构

首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List 和 Set。 List和Set都是接口,它们继承于Collection。List是...

AnsenZhu
01/03
0
0
Java中Collection和Iterator接口

1.Collection接口是List、Set和Queue接口的父接口,该接口里面定义方法即可用与操作Set集合,也用于操作List和Queue集合。Collection接口里面定义一些操作集合元素的方法。boolean add(Obj...

西红柿的眼泪
2016/07/13
15
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里P7架构师:这些技术点没搞懂,我劝你不要跳槽!

阿里P7架构师架构师:这些技术点没搞懂,我劝你不要跳槽! 哪些技术点呢? 废话不多说,技术点全在下面这6张图里面了! 1.怎么看源码? 2.分布式 3.微服务 4.性能优化 5.工程化 粉丝福利:一...

别打我会飞
20分钟前
2
0
易错题

architect刘源源
25分钟前
1
0
使用Json4s 将带有Timestamp的对象转json时 变为所在时区

在有Timestamp属性的对象转json时 最后出来的时间会减小8小时,是因为变成了0时区,需要将隐式转换中添加设置本地时区 import org.json4s.{DefaultFormats, Formats}import org.json4s.jac...

可达鸭Go
27分钟前
1
0
工作六年java程序员的工作感悟,带你走出迷茫

前言 很多年前,刚刚从大学毕业的时候,很多公司来校招。其中最烂俗的一个面试问题是:“你希望你之后三到五年的发展是什么?”。我当时的标准回答是(原话):“成为在某一方面能够独当一面...

java知识分子
32分钟前
3
0
jenkins邮箱发送失败以及解决方案

jenkins邮箱设置报错以及解决方案 Jenkins邮箱设置 我用了 Email Extended Plugin这个插件,这个插件会有更加丰富的邮件内容,建议添加。 1.安装 Email Extended Plugin 2.系统管理-系统设置...

shzwork
41分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部