zoukankan      html  css  js  c++  java
  • 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/
    本博客为自己总结亦或在网上发现的技术博文的转载。 如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/3917138.html
Copyright © 2011-2022 走看看