Iterator和Iterable的 新理解--一个神奇的接口
来源:互联网 发布:d3.js的作用 编辑:程序博客网 时间:2024/05/18 02:58
Iterator 和 Iterable
方法摘要
如果仍有元素可以迭代,则返回 true。
返回迭代的下一个元素。
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
1.两者区别
1)Iterator只是使用一次,Iterable可以使用多次,Iterable负责产生Iterator,用完就可以仍了
2)什么时候应该封装哪个?如果获得的流那么使用Iterator包装 如果获得的是 文件则包装为Iterable
2.神奇之处:
1.iterator 可以把逻辑访问从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构 。
Iterator 的遍历方式:
for(Iterator<String> iter = list.iterator();iter.hasNext;){
String tempStr = iter.next();
}
客户端从不直接和集合类打交道,他总是控制Iterator ,向它发送向前,向后,取当前元素的命令就可以间接地遍历整个集合
String tempStr = iter.next();
}
客户端从不直接和集合类打交道,他总是控制Iterator ,向它发送向前,向后,取当前元素的命令就可以间接地遍历整个集合
3.java.util.Iterator的实现
boolean
hasNext()
如果仍有元素可以迭代,则返回 true。
E
next()
返回迭代的下一个元素。
void
remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
每一种集合类返回的Iterator具体类型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个Iterator接口即可,这就是面向对象的威力。
在JDK5.0之后还可以使用foreach来对数组或者实现了Iterator的类对象进行遍历,但是只是限于遍历操作,不能删除,删除还是要用Iterator进行删除
4.在JDK中不论是List 还是Set都是实现的Iterable接口 为什么呢? 为什么不直接实现Iterator接口呢?
在Iterator中的核心方法是next() hasNext(),是依赖于迭代器的当前位置的 ,如果Collection都是实现的Iterator接口,势必导致集合对象中包含当前迭代器位置的数据,
当集合作为参数在不同方法中进行传递的时候,next()的位置是不可预知的
而Iterator则不然,每次调用都返回一个 从头开始的计数器,多个迭代器是相互不干扰的。
0 0
- Iterator和Iterable的 新理解--一个神奇的接口
- Iterator接口和Iterable接口的区别
- Iterator 和 Iterable 接口的区别
- iterable和iterator接口的区别
- Iterator和Iterable接口
- 迭代中Iterable和Iterator分为两个接口的好处
- java中的接口Iterator和Iterable的区别
- Java迭代器:iterator和iterable接口的区别
- Iterable和Iterator的区别
- Iterator 和 Iterable 的区别
- Iterable 和 Iterator 的区别
- Iterable和Iterator的辨析
- iterator与iterable接口之间的区别
- Iterator、Iterable接口的使用及详解
- 关于foreach、Iterable、Iterator的一点理解
- Iterable接口和Iterator迭代器
- Iterator迭代器和Iterable的关系
- Java中的Iterator和Iterable的区别
- 关于在PL/SQL代码中提交请求
- ACM
- ACdream Kill The Monster(线性dp)
- OpenStack_Swift源码分析——ObjectReplicator源码分析(2)
- 表驱动
- Iterator和Iterable的 新理解--一个神奇的接口
- ado.net基础代码
- java.text.DecimalFormat学习笔记
- 测试各种数据类型字节长度
- Davinci DM6446开发攻略——linux-2.6.18移植
- LeetCode--Linked List Cycle
- 第十一讲 页面布局及母版页
- ios推送常用方法
- Node.js 入门简介