Java迭代器Iterator
来源:互联网 发布:nba勇士队格林数据 编辑:程序博客网 时间:2024/06/05 07:34
迭代器:迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
- Iterator iterator = list.iterator();
- while(iterator.hasNext()){
- String string = iterator.next();
- //do something
- }
迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 在没有迭代器时我们都是这么进行处理的。如下:
对于数组我们是使用下标来进行处理的:
- int[] arrays = new int[10];
- for(int i = 0 ; i < arrays.length ; i++){
- int a = arrays[i];
- //do something
- }
对于ArrayList是这么处理的:
- List<String> list = new ArrayList<String>();
- for(int i = 0 ; i < list.size() ; i++){
- String string = list.get(i);
- //do something
- }
对于这两种方式,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用。 在实际应用中如何需要将上面将两个集合进行整合是相当麻烦的。所以为了解决以上问题,Iterator模式腾空出世,它总是用同一种逻辑来遍历集合。使得客户端自身不需要来维护集合的内部结构,所有的内部状态都由Iterator来维护。客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。
Object next():返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换成自己需要的类型
boolean hasNext():判断容器内是否还有可供访问的元素
void remove():删除迭代器刚越过的元素
对于我们而言,我们只一般只需使用next()、hasNext()两个方法即可完成迭代。如下:
- for(Iterator it = c.iterator(); it.hasNext(); ) {
- Object o = it.next();
- //do something
- }
- Java:迭代器(Iterator)
- java 迭代器(Iterator)
- Java 迭代器 Iterator ListIteator
- java 迭代器(Iterator)
- 迭代器(iterator)(java)
- Java Iterator(迭代器)
- java 迭代器Iterator
- Java迭代器Iterator
- Java迭代器 | Iterator用法
- JAVA 迭代器(Iterator)
- Java--------迭代器Iterator
- java之Iterator迭代器
- java中的Iterator迭代器
- Java的Iterator迭代器
- Java 迭代器Iterator
- Java Iterator迭代器
- java Iterator迭代器
- [java容器]Iterator迭代器
- Android学习路线指南
- ubuntu下权限设置问题
- SVN服务器介绍
- 使用htps进行,Get请求和post请求
- 如何在PLSQL中调试PACKAGE包中的FUNCTION函数
- Java迭代器Iterator
- 谈谈python的GIL、多线程、多进程
- iOS 禁止横屏的解决方案
- navigator.userAgent.indexOf来判断浏览器类型
- hdoj5536Chip Factory
- Java中equals和==的区别
- jquery里的val()给对象重新复制
- 鼠标滚轮控制页面滚动(山寨苹果官网iPhone5s的滚屏动画实例)
- gradle.build里面创建编译时属性值