Java中Iterable和Iterator的辨析
来源:互联网 发布:工程类 网络类 编辑:程序博客网 时间:2024/06/04 17:53
本文主要对Iterable和Iterator两个接口进行深入学习。
1、Iterable接口
Iterable接口 (Java.lang.Iterable) 是Java集合的顶级接口之一。我们首先看下这这个接口在JDK中的定义:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
(1)可见,Iterable接口中只包含一个方法,就是一个iterator()方法,用来返回一个Iterator类型的对象,或者说返回一个实现了Iterator接口的对象。
(2)实现了Iterable接口的类可以拥有增强的for循环,即只要实现了Iterable接口的类,就可以使用Iterator迭代器了。如
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Tip:注意这里的函数输入参数Collection<AnyType> coll
,其中coll是个接口变量。本来接口是不能用new来实例化一个接口的,即不能构造接口对象,但是可以用来声明接口变量,而且接口变量必须引用实现了接口的类对象。
(3)集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。
好了,那么下面我们来看下Iterable接口中提到的Iterator接口吧。
2、Iterator接口
首先,我们还是先看下Iterator接口的定义:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(1)当编译器见到一个正在用于Iterable对象的增强的for循环的时候,它用对iterator()方法的调用来代替增强的for循环以得到一个Iterator对象,然后调用next和hasNext。我们可以给出iterator()方法的定义
因此,上面Iterable例程可以改写为
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(2)Iterator接口中的核心方法next(),hasNext(),remove(),都是依赖当前位置。如果这些集合直接实现Iterator接口,则势必导致集合对象中包含当前迭代位置的数据(指针)。当集合在不同方法间进行传递的时候,由于当前迭代位置不可知,所以next()的结果也不可知。除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。 而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。
3、综合应用
我们后面会自己实现数据结构ArrayList,其中就用到了Iterable接口和Iterator接口,我们看下这个综合的例子
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
其中,iterator()方法就直接返回ArrayListIterator类的一个实例,该类是一个实现Iterator接口的类。
本文转载:http://blog.csdn.net/lipengcn/article/details/51700153
- Java中Iterable和Iterator的辨析
- Java中Iterable和Iterator的辨析
- Java中Iterable和Iterator的辨析
- Java中Iterable和Iterator的辨析
- Java中Iterable和Iterator的辨析
- Iterable和Iterator的辨析
- java中Iterator和Iterable的区别
- Java中Iterable和Iterator的区别
- java中Iterator和Iterable的区别
- java 中 Iterator 和 Iterable 区别
- Java中Iterator与Iterable的区别
- Python 中 Iterator和Iterable的区别
- Java中的Iterator和Iterable的区别
- java集合----Iterable和Iterator的区别
- JAVA中ListIterator和Iterator的详解与辨析
- Java中的Iterable和Iterator
- Java迭代器---Iterable和Iterator
- Java Iterable 和 Iterator 示例
- opencv之视频读取与文件存储
- Linux安装apache源码包报错:mod_deflate has been requested but can not be built due to prerequisite failures
- 2017.3.18 糖果 思考记录
- Ajax 中文乱码处理
- JSP
- Java中Iterable和Iterator的辨析
- java中栈和堆的区别
- opengl 使用soil读入bmp图像作为纹理
- 跟我学系列,走进Scrapy爬虫(六)Spiders爬虫
- 关于CSS3的box-sizing
- 根据后序和中序遍历输出先序遍历
- 后台数据库的连接
- 在测试环境安装使用Apache Http Server
- 堆和栈的区别(转过无数次的文章)