浏览 4826 次
锁定老帖子 主题:JAVA基础:迭代与迭代器
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-13
迭代器(也是一种设计模式)的概念可以用于达成不重写代码就可以应用于不同类型的容器.迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构(也就是不同容器的类型).此外,迭代器通常被称为"轻量级"对象:创建它的代价小. Java的Iterator就是一种迭代器(只能单向移动),它只能用来: 1,使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素; 2,使用next()获得序列中的下一个元素; 3,使用hasNext()检查序列中是否还有元素; 4,使用remove()将迭代器新近返回的元素删除. 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()); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |