分享

Java 5.0 中增强的for循环——for/in (for each) - 一杯苦咖啡 - ITeye技术网站

 知识储备库_wucl 2011-06-22
以前写遍历是:
//遍历数组
for(int i = 0; i < array.length; i ++) ...{
    int n = array[i];
    //do something
}
//遍历集合
for(Interator iter = list.iterator(); iter.hasNext(); ) ...{
    Object o = iter.next();
    //do something
}


现在使用增强型的:
遍历数组:
//以前我们这样写:
void someFunction () ...{
    int[] array = ...{1,2,5,8,9};
    int total = 0;
    for (int i = 0; i < array.length; i++) ...{
        total += array[i];
    }
    System.out.println(total);
}

//现在我们只需这样写(和以上写法是等价的):
void someFunction () ...{
    int[] array = ...{1,2,5,8,9};
    int total = 0;       
    for (int n : array) ...{
        total += n;
    }
    System.out.println(total);
}
这种写法的缺点:

显而易见,for/in(for each)循环自动控制一次遍历数组中的每一个元素,然后将它赋值给一个临时变量(如上述代码中的int n),然后在循环体中可直接对此临时变量进行操作。这种循环的缺点是:

1.       只能顺次遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素;

2.       循环变量(i)不可见,如想知道当前遍历到数组的第几个元素。


遍历集合:
//以前我们这样写:
void someFunction () ...{
    List list = new ArrayList();
    list.add("Hello ");
    list.add("Java ");
    list.add("World!");
    String s = "";
    for (Iterator iter = list.iterator(); iter.hasNext();) ...{
        String temp= (String) iter.next();   
        s += temp;
    }
    System.out.println(s);
}

//现在我们这样写:
void someFunction () ...{
    List list = new ArrayList();
    list.add("Hello ");
    list.add("Java ");
    list.add("World!");
    String s = "";
    for (Object o : list) ...{
        String temp = (String) o;
        s += temp;
    }
    System.out.println(s);
}


// 如果结合“泛型”,那么写法会更简单,如下:
void someFunction () ...{
    List<String> list = new ArrayList<String>();
    list.add("Hello ");
    list.add("Java ");
    list.add("World!");
    String s = "";
    for (String temp : list) ...{           
        s += temp; //省去了对强制类型转换步骤
    }
    System.out.println(s);
}


//上述代码会被编译器转化为:
void someFunction () ...{
    List<String> list = new ArrayList<String>();
    list.add("Hello ");
    list.add("Java ");
    list.add("World!");
    String s = "";
    for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) ...{           
        String temp = iter.next();
        s += temp;
    }
    System.out.println(s);
}
这种写法的缺点:

         虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多