Java FOREACH 实现原理 优点 以及 弊端

转自:https://www.cnblogs.com/slwenyi/p/6393366.html

通过反编译得出结论

在编译的时候编译器会自动将对for这个关键字的使用转化为对目标的迭代器的使用,这就是foreach循环的原理。进而,我们再得出两个结论:

1、ArrayList之所以能使用foreach循环遍历,是因为ArrayList所有的List都是Collection的子接口,而Collection是Iterable的子接口,ArrayList的父类AbstractList正确地实现了Iterable接口的iterator方法。之前我自己写的ArrayList用foreach循环直接报空指针异常是因为我自己写的ArrayList并没有实现Iterable接口

2、任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口

实际上,这种做法就是23中设计模式中的迭代器模式

数组呢?

上面的讲完了,好理解,但是不知道大家有没有疑问,至少我是有一个疑问的:数组并没有实现Iterable接口啊,为什么数组也可以用foreach循环遍历呢?先给一段代码,再反编译:

结论:Java将对于数组的foreach循环转换为对于这个数组每一个的循环引用

JDK1.5以后  Java中新增了一个接口Iterable    Iterable接口的出现就是为了 "foreach" 而生的。

实现Iterable这个接口 允许对象成为 "foreach" 语句的目标

优点:代码量减少 方便对容器进行遍历

缺点:没有索引 不能操作容器里面的元素。

猜你喜欢

转载自blog.csdn.net/Hurricane_m/article/details/89259201