• Java增强的for循环和普通for循环对比


    JDK1.5中增加了增强的for循环。

    缺点:
      对于数组,不能方便的访问下标值;
      对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
    除了简单遍历并读取其中的内容外,不建议使用增强的for循环。

    一、遍历数组

    语法为:

    for (Type value : array) {
        expression value;
    }

    //以前我们这样写:

    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)不可见,如果想知道当前遍历到数组的第几个元素,只能这样写:

     int i = 0;
     for (int n : array) {
         System.out.println("This " + i + "-th element in the array is " + n);
         i++;
     }

    二、遍历集合

     语法为:

    for (Type value : Iterable) {
        expression value;
    }

    注意:for/in循环遍历的集合必须是实现Iterable接口的。

     1  //以前我们这样写:
     2 void someFunction ()
     3 {
     4     List list = new ArrayList();
     5     list.add("Hello ");
     6     list.add("Java ");
     7     list.add("World!");
     8     String s = "";
     9     for (Iterator iter = list.iterator(); iter.hasNext();)
    10    {
    11        String temp= (String) iter.next();
    12        s += temp;
    13     }
    14     System.out.println(s);
    15  }
     1 //现在我们这样写:
     2 
     3 void someFunction ()
     4 {
     5     List list = new ArrayList();
     6     list.add("Hello ");
     7     list.add("Java ");
     8     list.add("World!");
     9     String s = "";
    10     for (Object o : list)
    11    {
    12        String temp = (String) o;
    13        s += temp;
    14    }
    15    System.out.println(s);
    16 }
     1 // 如果结合“泛型”,那么写法会更简单,如下:
     2  void someFunction ()
     3 {
     4     List list = new ArrayList();
     5     list.add("Hello ");
     6     list.add("Java ");
     7     list.add("World!");
     8     String s = "";
     9     for (String temp : list)
    10    {
    11        s += temp; //省去了对强制类型转换步骤
    12    }
    13    System.out.println(s);
    14 }
    15 //上述代码会被编译器转化为:
    16  void someFunction ()
    17 {
    18     List list = new ArrayList();
    19     list.add("Hello ");
    20     list.add("Java ");
    21     list.add("World!");
    22     String s = "";
    23     for (Iterator iter = list.iterator(); iter.hasNext(); )
    24    {
    25        String temp = iter.next();
    26        s += temp;
    27     }
    28     System.out.println(s);
    29  }

    这种写法的缺点:

    虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。 综上所述,Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。

     

    作者:SummerChill
    出处:http://www.cnblogs.com/DreamDrive/
    本博客为自己总结亦或在网上发现的技术博文的转载。 如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    按字母分类的产品组件
    container中的内容 垂直-水平居中
    安卓手机--键盘谈起后 fixed背景图片被键盘顶起的问题
    清除样式的css
    vue 路由(二级)配置及详细步骤
    vue 路由 URL传参
    路由表的组件群
    vue 路由传参
    vue 路由入门(vue-router)
    jQuery对文档的操作
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/3917138.html
Copyright © 2020-2023  润新知