黑马程序员技术交流社区

标题: 增强for循环的内幕 [打印本页]

作者: pizhihui    时间: 2015-6-13 20:31
标题: 增强for循环的内幕
在学集合的时候,我们可以使用迭代器去遍历集合,即访问集合中所有的元素,但是使用增强for循环也可以实现集合的遍历功能,我们探究一下这个增强for,总的来说:增强for循环内部也是使用迭代器实现的,但是他是怎么实现的了,这里我们举Collection的例子来看看源码是怎么告诉我们的。
先是Collection的部分源代码
  1. //Collection 层次结构 中的根接口
  2. public interface Collection<E> extends Iterable<E> {
  3.        
  4.         int size();
  5.        
  6.         boolean isEmpty();
  7.        
  8.         boolean contains(Object o);
  9.        
  10.         Iterator<E> iterator();//返回在此 collection 的元素上进行迭代的迭代器
  11.        
  12.         Object[] toArray();
  13.        
  14.        
  15.          boolean add(E e);
  16.          
  17.          boolean remove(Object o);
  18.          
  19.          boolean containsAll(Collection<?> c);
  20.          
  21.          void clear();
  22.          
  23.          boolean equals(Object o);
  24.          
  25.          int hashCode();

  26. }
复制代码

这里我们可以看出Collection接口继承了Iterable,接着我们跟踪Iterable,源代码如下

  1. public interface Iterable<T> {。

  2.         Iterator<T> iterator();//返回一个在一组 T 类型的元素上进行迭代的迭代器。

  3. }
复制代码

发现里面什么都没有,只有一个Iterator类型的iterator的方法,我们查看API文档,可以看到这个Iterable的描述是:实现这个接口允许对象成为 "foreach" 语句的目标。这里我们可以看出,增强for循环在这里Java帮我们实现了,接着我们可以看看Iterator类的代码。
  1. //对 collection 进行迭代的迭代器。
  2. public interface Iterator<E> {

  3.         boolean hasNext();//如果仍有元素可以迭代,则返回 true
  4.        
  5.         E next();//返回迭代的下一个元素。
  6.        
  7.         void remove();//从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

  8. }
复制代码

这里我们就可以看出迭代器使用的一些方法了。
最终我们知道了增强for循环在Iterable类中,Java底层帮我们实现了增强for循环的底层功能。


作者: 十五号的人生    时间: 2015-6-13 21:32
学习了~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2