在学集合的时候,我们可以使用迭代器去遍历集合,即访问集合中所有的元素,但是使用增强for循环也可以实现集合的遍历功能,我们探究一下这个增强for,总的来说:增强for循环内部也是使用迭代器实现的,但是他是怎么实现的了,这里我们举Collection的例子来看看源码是怎么告诉我们的。
先是Collection的部分源代码
- //Collection 层次结构 中的根接口
- public interface Collection<E> extends Iterable<E> {
-
- int size();
-
- boolean isEmpty();
-
- boolean contains(Object o);
-
- Iterator<E> iterator();//返回在此 collection 的元素上进行迭代的迭代器
-
- Object[] toArray();
-
-
- boolean add(E e);
-
- boolean remove(Object o);
-
- boolean containsAll(Collection<?> c);
-
- void clear();
-
- boolean equals(Object o);
-
- int hashCode();
- }
复制代码
这里我们可以看出Collection接口继承了Iterable,接着我们跟踪Iterable,源代码如下
- public interface Iterable<T> {。
- Iterator<T> iterator();//返回一个在一组 T 类型的元素上进行迭代的迭代器。
- }
复制代码
发现里面什么都没有,只有一个Iterator类型的iterator的方法,我们查看API文档,可以看到这个Iterable的描述是:实现这个接口允许对象成为 "foreach" 语句的目标。这里我们可以看出,增强for循环在这里Java帮我们实现了,接着我们可以看看Iterator类的代码。
- //对 collection 进行迭代的迭代器。
- public interface Iterator<E> {
- boolean hasNext();//如果仍有元素可以迭代,则返回 true
-
- E next();//返回迭代的下一个元素。
-
- void remove();//从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
- }
复制代码
这里我们就可以看出迭代器使用的一些方法了。
最终我们知道了增强for循环在Iterable类中,Java底层帮我们实现了增强for循环的底层功能。
|
|