java5新添加了foreach特性,这个和以前普遍使用的for有什么区别?
好像foreach循环中不能对被遍历的集合进行修改?其它呢?

解决方案 »

  1.   

    如果只是遍历集合或数组  用for each 好些要修改,用for 其它 没什么区别吧
      

  2.   

    java中成为增强for循环吧
    如1楼,因为在增强for循环中无法获取index,一般适合用于纯粹的遍历
      

  3.   

    可以修改的吧 工作大体一样 foreach更简洁 但使用foreach必须是泛型
      

  4.   

    foreach 语句不需要下标就可以遍历数组中的元素,进行循环;
    for语句需要下标。
      

  5.   

    没什么区别..应用的场合不同.有的时候需要获取index有的时候不需要.. 根据你的需要来选择.
      

  6.   

    建议不要用foreach,因为经过实践,比for更耗系统资源...
      

  7.   

    要对一个进行foreach循环,这个类必须实现Iterable接口。
      

  8.   

    不是的吧,在javac 时,已经处理过了
      

  9.   

    foreach 是jdk1.5出现的新特性。区别没有。实质都是一样的。都是循环遍历。
    foreach一般只用来取值。要对每个遍历出来的对象进行比较判断时用for循环好点
      

  10.   

    可以使用foreach的对象必须实现Iterator 接口,遍历集合所有元素的话用foreach更加简洁,for功能是跟强大些,支持index取元素,性能的话你可以用 javap -c 类名 看一下class文件 
      

  11.   

    foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
      

  12.   

    foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
      

  13.   

    for each还好 感觉还蛮好用的  至少代码是简化了
      

  14.   

    foreach只能从头到尾一个接一个遍历
    for可以使用下标来控制位置
      

  15.   


    是的,反编译看一下源码,会发现对list的foreach变成了Iterator的普通for
      

  16.   

    foreach本身的实现就是用Iterator 来实现的
      

  17.   

    foreach适合用于简单的遍历,但是比较复杂的处理还是要用for
      

  18.   

    foreach 有泛型支持,for 还要强转
      

  19.   

    看了一下,貌似用foreach遍历的类必须实现Iterable接口;另外就是它不能指定位置。
      

  20.   

    foreach 对遍历数组十分有效 
      

  21.   

    foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
      

  22.   

    容器类在进行遍历操作的时候不能进行修改操作。foreach 算是一种加强的for循环吧。  代码更加简练一点。试用与对数组 和容器 进行遍历。
      

  23.   

    foreach在遍历过程中会对执行对象执行锁定,底层也是用Iterator实现的。
    只有在简单遍历时才推荐使用foreach循环。
      

  24.   

    用foreah方法必须实现实现相应的Iteratable,不过不用担心,系统都会自动实现的。这种循环只是对for的增强,只是读取,但不能获得所引。是v1.5以上的新特性
      

  25.   

    我感觉没多大区别,在没有下标的时候用foreach方便些
      

  26.   

    用for比foreach更为灵活。只是集合或数组遍历麻烦一点,但灵活度不如for.
      

  27.   

    再次重申,最好不要用foreach..因为比for更耗资源用事实来说话....
    package my.code;import java.util.Arrays;
    import java.util.List;public class TestFor {    public TestFor() {
            Integer[] tarray = new Integer[15000000];
            for (int i = 0; i < tarray.length; i++) {
                tarray[i] = 0;
            }
            List<Integer> tlist = Arrays.asList(tarray);
            // 初始化完毕,开始测试
            long start = 0, end = 0;        // 先测试数组性能
            // 一般模式
            start = System.currentTimeMillis();
            for (int i = 0; i < tarray.length; i++) {        }
            end = System.currentTimeMillis();
            System.out.println("数组_一般模式:" + (end - start));        // 预赋值模式
            start = System.currentTimeMillis();
            for (int i = 0, n = tarray.length; i < n; i++) {        }
            end = System.currentTimeMillis();
            System.out.println("数组_预赋值模式:" + (end - start));        // ForEach模式
            start = System.currentTimeMillis();
            for (Integer i : tarray) {        }
            end = System.currentTimeMillis();
            System.out.println("数组_ForEach模式:" + (end - start));        // 测试List性能
            // 一般模式
            start = System.currentTimeMillis();
            for (int i = 0; i < tlist.size(); i++) {        }
            end = System.currentTimeMillis();
            System.out.println("List_一般模式:" + (end - start));        // 预赋值模式
            start = System.currentTimeMillis();
            for (int i = 0, n = tlist.size(); i < n; i++) {        }
            end = System.currentTimeMillis();
            System.out.println("List_预赋值模式:" + (end - start));        // ForEach模式
            start = System.currentTimeMillis();
            for (Integer integer : tlist) {        }
            end = System.currentTimeMillis();
            System.out.println("List_ForEach模式:" + (end - start));    }    /**
         * @param args
         */
        public static void main(String[] args) {
            new TestFor();
        }}
    执行结果:数组_一般模式:31
    数组_预赋值模式:31
    数组_ForEach模式:47
    List_一般模式:188
    List_预赋值模式:31
    List_ForEach模式:625============================================
    得出结论,如果是数组,就不用那么麻烦.....效率几乎完全一样,如果是List,那么,最好用预赋值模式,另外,ForEach模式的效率太低,不值得推荐,虽然ForEach每次循环都要赋一次值,但是我在循环体中加入赋值语句(ForEach中不加):
    tInt = tarray[i];

    tInt = tlist.get(i);执行结果:数组_一般模式:47
    数组_预赋值模式:47
    数组_ForEach模式:47
    List_一般模式:359
    List_预赋值模式:219
    List_ForEach模式:625
      

  28.   

    foreach对于list这些应该是用迭代器遍历,也就是类似与下面这样的实现
    // 迭代模式
    start = System.currentTimeMillis();
    for (Iterator<Integer> iter = tlist.iterator(); iter.hasNext(); iter
    .next()) {
    }
    end = System.currentTimeMillis();
    System.out.println("List_迭代模式:" + (end - start));
      

  29.   

    另外,#44的一般模式和预赋值模式在测试中最好有一个取值操作,恩,毕竟foreach是直接取到值得