java5.0中增强的for/in循环

来源:互联网 发布:社交网络的坏处 编辑:程序博客网 时间:2024/06/05 12:44

看书的时候看到这个知识点,想了解详细点所以就在一些博客上看到了这方面的资料,找到了两篇觉得写得不错了,那篇短一点的我直接转载过来了,长的我就粘贴个地址吧,方便更全面的了解这个知识点http://blog.csdn.net/hanxs/article/details/3850142


以前写遍历是:


//遍历数组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循环就有些力不从心了。