java中 foreach 的使用

GeekWay發表於2011-11-27
(注:本部落格來自網際網路,內容為本人知識所獲,遂轉載以備不時之需,與君共賞!轉載地址:http://hi.baidu.com/chssheng2007/blog/item/55f075d301bf0cd3a9ec9aad.html)

java foreach 使用
2010年03月25日 星期四 13:16
foreach語句使用總結
foreach語句是java5的新特徵之一,在遍歷陣列、集合方面,foreach為開發人員提供了極大的方便。
foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。
foreach並不是一個關鍵字,習慣上將這種特殊的for語句格式稱之為“foreach”語句。從英文字面意思理解foreach也就是“for 每一個”的意思。實際上也就是這個意思。
foreach的語句格式:
for(元素型別t 元素變數x : 遍歷物件obj){
     引用了x的java語句;
}
下面通過兩個例子簡單例子看看foreach是如何簡化程式設計的。程式碼如下:
一、foreach簡化陣列和集合的遍歷
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-12-3
* Time: 16:58:24
* Java5新特徵之foreach語句使用總結
*/

public class TestArray {
    public staticvoid main(String args[]) {
         TestArray test = new TestArray();
         test.test1();
         test.listToArray();
         test.testArray3();

     }

    /**
     * foreach語句輸出一維陣列
     */

    public void test1() {
        //定義並初始化一個陣列
        int arr[] = {2, 3, 1};
         System.out.println("----1----排序前的一維陣列");
        for (int x : arr) {
             System.out.println(x); //逐個輸出陣列元素的值
         }

        //對陣列排序
         Arrays.sort(arr);

        //利用java新特性for each迴圈輸出陣列
         System.out.println("----1----排序後的一維陣列");
        for (int x : arr) {
             System.out.println(x); //逐個輸出陣列元素的值
         }
     }

    /**
     * 集合轉換為一維陣列
     */

    public void listToArray() {
        //建立List並新增元素
         List<String> list = new ArrayList<String>();
         list.add("1");
         list.add("3");
         list.add("4");

        //利用froeach語句輸出集合元素
         System.out.println("----2----froeach語句輸出集合元素");
        for (String x : list) {
             System.out.println(x);
         }

        //將ArrayList轉換為陣列
         Object s[] = list.toArray();

        //利用froeach語句輸出集合元素
         System.out.println("----2----froeach語句輸出集合轉換而來的陣列元素");
        for (Object x : s) {
             System.out.println(x.toString()); //逐個輸出陣列元素的值
         }
     }

    /**
     * foreach輸出二維陣列測試
     */

    public void testArray2() {
        int arr2[][] = {{4, 3}, {1, 2}};
         System.out.println("----3----foreach輸出二維陣列測試");
        for (int x[] : arr2) {
            for (int e : x) {
                 System.out.println(e); //逐個輸出陣列元素的值
             }
         }
     }

    /**
     * foreach輸出三維陣列
     */

    public void testArray3() {
        int arr[][][] = {
                 {{1, 2}, {3, 4}},
                 {{5, 6}, {7, 8}}
         };

         System.out.println("----4----foreach輸出三維陣列測試");
        for (int[][] a2 : arr) {
            for (int[] a1 : a2) {
                for (int x : a1) {
                     System.out.println(x);
                 }
             }
         }
     }
}
執行結果:
----1----排序前的一維陣列
2
3
1
----1----排序後的一維陣列
1
2
3
----2----froeach語句輸出集合元素
1
3
4
----2----froeach語句輸出集合轉換而來的陣列元素
1
3
4
----4----foreach輸出三維陣列測試
1
2
3
4
5
6
7
8

Process finished with exit code 0
二、foreach語句的侷限性
通過上面的例子可以發現,如果要引用陣列或者集合的索引,則foreach語句無法做到,foreach僅僅老老實實地遍歷陣列或者集合一遍。下面看一個例子就明白了:
/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-12-3
* Time: 17:07:30
* foreach語句的侷限性
*/

public class TestArray2 {

    public staticvoid main(String args[]) {
        //定義一個一維陣列
        int arr[] = new int[4];
         System.out.println("----未賦值前輸出剛剛定義的陣列----");
        for (int x : arr) {
             System.out.println(x);
         }

        //通過索引給陣列元素賦值
         System.out.println("----通過迴圈變數給陣列元素賦值----");
        for (int i = 3; i > 0; i--) {
             arr[i] = i;
         }
        //迴圈輸出建立的陣列
         System.out.println("----賦值後,foreach輸出建立好的陣列----");
        for (int x : arr) {
             System.out.println(x);
         }
     }
}

執行結果:
----未賦值前輸出剛剛定義的陣列----
0
0
0
0
----通過迴圈變數給陣列元素賦值----
----賦值後,foreach輸出建立好的陣列----
0
1
2
3

Process finished with exit code 0
三、總結

foreach語句是for語句特殊情況下的增強版本,簡化了程式設計,提高了程式碼的可讀性和安全性(不用怕陣列越界)。相對老的for語句來說是個很好的補充。提倡能用foreach的地方就不要再用for了。在用到對集合或者陣列索引的情況下,foreach顯得力不從心,這個時候是用for語句的時候了。foreach一般結合泛型使用

相關文章