JAVA基础:迭代与迭代器

while,do-while和for用来控制循环,有时将它们划分为"迭代语句".语句会重复执行,直到起控制作用的布尔表达式(Boolean-expression)得到"假"的结果为止.

迭代器(也是一种设计模式)的概念可以用于达成不重写代码就可以应用于不同类型的容器.迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构(也就是不同容器的类型).此外,迭代器通常被称为"轻量级"对象:创建它的代价小.

Java的Iterator就是一种迭代器(只能单向移动),它只能用来:
1,使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素;
2,使用next()获得序列中的下一个元素;
3,使用hasNext()检查序列中是否还有元素;
4,使用remove()将迭代器新近返回的元素删除.

[code]package iterator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/*
* 通用的迭代器;
* 将遍历一个序列的操作与此序列底层结构相分离;
* 因为Iterator隐藏了容器底层的结构,所以,IteratorAll.printAll并不知道,也不关心此Iterator是从何容器而来;
* 取得一个对象容器,遍历容器以对每个对象执行动作;
* 该方法间接使用了Object.toString()方法,因为更具通用性;
*/
class IteratorAll {
static void printAll(Iterator e) {
while (e.hasNext()) {
System.out.println("\t" + e.next());
/*
* 虽然不必要,但仍然可以明确地进行类型转换,效果与调用toString()相同;
* System.out.println("\t" + (Integer)e.next());
* 通常Object提供的方法并不能满足需求,所以又要考虑类型转换的问题,
* 必须假设你已经取得了某个特定类型的序列的Iterator,并将对结果对象做类型转换(如果类型错误会得到一个运行时异常).
*/
}
}
}

/*
* 创建两种不同的容器,一个ArrayList和一个HashMap,均使用Integer填充
*/
public class IteratorDemo {
public static void main(String[] args) {
// 创建ArrayList,并填充Integer类型
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
// 创建HashMap,并填充Integer类型
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < 10; i++) {
map.put(i, i);
}
System.out.println("List");
// 调用上面的通用迭代器,打印ArrayList
IteratorAll.printAll(list.iterator());
System.out.println("Map");
// 对HashMap而言,entrySet()方法生成一个由Map.entry对象组成的Set,Map.entry对象包含映射中每个元素的"键"和"值"
// 调用上面的通用迭代器,打印HashMap
IteratorAll.printAll(map.entrySet().iterator());
}
}[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值