Thinking in java 之:迭代器Iterator

迭代器(也是一种设计模式)是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外迭代器通常被称为轻量级对象:创建它的代价小。因此,经常可以见到迭代器有些奇怪的限制,例如:Java的Iterator只能单向移动,这个Iterator只能用来:

1.使用方法Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。

2.使用next()获得序列中的下一个元素。

3.使用hasNext()检查序列中是否还有元素。

4.使用remove()将迭代器新近返回的元素删除。

public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		Iterator<String> iter = list.iterator();
		while (iter.hasNext()) {
			String name = iter.next();
			System.out.print(name + " ");
		}
		if (!iter.hasNext()) {
			System.out.println("指针到达了最后面");
		}
		// 将iterator指针调至最前面
		iter = list.iterator();
		if (iter.hasNext()) {
			System.out.println(iter.next());
		}
	}
}
打印结果:

a b c 指针到达了最后面
a

可以把iterator理解为有状态的,它的内部会维护一个逻辑上的指针,每次调用next()方法,指针都会后移,上次遍历完之后,指针移到了末尾,所以需要重新赋值iterator对象,这样赋值后的逻辑指针会调整到第一个元素前面。

Iterator是一个接口,不能直接调用它的方法,所以必须调用iterator()方法,相当于将它声明为了一个实现Iterator接口的子类的引用。Collection接口是继承Iterator接口的,实现了List,Set接口的子类的对象都可以调用iterator()方法,而实现了Map的子类需要使用Iterator iter=map.keySet().iterator();方法进行遍历。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值