我是靠谱客的博主 明亮烤鸡,最近开发中收集的这篇文章主要介绍foreach VS for loop,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天电面的时候面试官问:

java中数组和链表,进行遍历时,foreach 和 for loop选哪个?
平常没有注意foreach 和 for loop 的区别,以为它俩是一样的,不过既然面试官这么问了,那肯定是不一样的啦。

参考这个 链接。
foreach,即 The enhanced for statement,使用foreach时,被遍历的对象只有两种情况:

1.继承 Iterable 接口的类。

此时 foreach 以以下方式运行

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    {VariableModifier} TargetType Identifier = (TargetType) #i.next();
    Statement
}

这里有一点要注意的是:

If the declared type of the local variable in the header of the enhanced for statement is a reference type, then TargetType is that declared type; otherwise, TargetType is the upper bound of the capture conversion of the type argument of I, or Object if I is raw.
大意就是:如果foreach中的第一个变量是引用类型,那么TargetType就声明为那个类型,否则,TargetType就声明为 Iterator.next 对象的类型。

比如如下例子:

List<? extends Integer> l = ...
for (float i : l) ...

等效于

for (Iterator<Integer> #i = l.iterator(); #i.hasNext(); ) {
    float #i0 = (Integer)#i.next();
    ...

2. 数组

当被遍历的对象为数组时,foreach以以下方式运行

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}

回到开始的问题,在遍历数组时,使用for和foreach都一样的,但是使用链表时(比如 LinkedList),使用 foreach 性能会好些,毕竟链表长于插入删除,定位存取则不如数组。

注:以上内容如有错误,望不吝指出!
转载请注明出处:http://blog.csdn.net/big_heart_c/article/

最后

以上就是明亮烤鸡为你收集整理的foreach VS for loop的全部内容,希望文章能够帮你解决foreach VS for loop所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部