Iterator 和 Iterable
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 ,向它发送向前,向后,取当前元素的命令就可以间接地遍历整个集合 |
3.java.util.Iterator的实现
|
每一种集合类返回的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则不然,每次调用都返回一个 从头开始的计数器,多个迭代器是相互不干扰的。