java中的增強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接口的。

 //以前我們這樣寫:

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 list = new ArrayList();

    list.add("Hello ");

    list.add("Java ");

    list.add("World!");

    String s = "";

    for (String temp : list)

   {

       s += temp; //省去了對強制類型轉換步驟

   }

   System.out.println(s);

}

//上述代碼會被編譯器轉化為:

 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 = iter.next();

       s += temp;

    }

    System.out.println(s);

 }

這種寫法的缺點:

    雖然對集合進行的for/in操作會被編譯器轉化為Iterator操作,但是使用for/in時,Iterator是不可見的,所以如果需要調用Iterator.remove()方法,或其他一些操作, for/in循環就有些力不從心了。 綜上所述,Java 5.0中提供的增強的for循環——for/in(for each)循環能讓我們的代碼更加簡潔,讓程序員使用時更加方便,但是也有它的局限性,所以一定要根據實際需要有選擇性地使用,不要盲目追求所謂的“新特性”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM