Java 1.5 特性 : Enhanced for Loop

JavaScript 中的 foreach

在 JavaScript 中,針對 for 迴圈有特殊的語法處理,使得我們可以巡迴物件中的所有變數和函式。例如我們自己建立一個物件 obj,並且設定它的欄位 name 為 John,欄位 age 為 20,那麼使用底下程式碼,我們便能將 obj 中的所有變數(事實上還包括函式)找出來,並且顯示在彈出式視窗中。

// JavaScript
var obj = new Object()
obj.name = "John"
obj.age = 20

var str = ""
for (var i in obj) {
    str += "obj." + i + " = " + obj[i] + "\n"
}

alert(str)

Java 與 C++ 中的迭代器尋訪集合

在 Java 中,和 C++ 相同的是,我們必須要知道陣列的長度,或是使用迭代器取得「是否有下一位」的資訊,才能尋訪所有陣列或容器中的元素。例如:

// Java 集合
list = getSomeList();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
    Integer value=(Integer) iterator.next();
}
// Java 陣列
array = getSomeArray();
for (int i = 0, j = array.length; i < j; i++) {
    System.out.println(array[i]);
}
// C++ 容器
dirs = getSomeReferenceVector();
for (vector::iterator iter = dirs->begin(); iter != dirs->end(); iter++) {
    cout<<"Reading "<<(*iter)<<" ...";
}

Java 1.5 的 foreach 迴圈

在 Java 1.5 中,針對 for 迴圈作了一些加強,讓我們無需知道陣列或容器的長度,甚至也不用迭代器,便可以將其中的元素一一取出。使用的語法是 for (Type varName : listName),即可將 listName 中的元素依順序由型別為 Type 的變數 varName 存取,當然陣列或容器中元素的型別必須是可以轉型為 Type 的物件。底下例子包含 Generic Types 及 Auto-boxing 特性。

import java.util.List;
import java.util.Vector;

public class EnhancedForLoop1 {
    public static void main(String[] args) {
        List list = new Vector();
        for (int i = 0; i < 6; i++) {
            list.add(i);
        }
        for (Integer i : list) {
            System.out.print(i * 100);
            System.out.print("-");
        }
    }
}

輸出結果:

0-100-200-300-400-500-

陣列及基本型別

底下是一個使用陣列及基本型別的例子。

public class EnhancedForLoop2 {
    public static void main(String[] args) {
        int[] array = new int[6];
        for (int i = 0, j = array.length; i < j; i++) {
            array[i] = i;
        }
        for (int i : array) {
            System.out.print(i * 100);
            System.out.print("-");
        }
    }
}

Map 映射

底下是一個尋訪所有 value 的 for 迴圈。當然,因為用 HashMap,所以並沒有什麼順序。

import java.util.Map;
import java.util.HashMap;

public class EnhancedForLoop3 {
    public static void main(String[] args) {
        Map map = new HashMap();
        for (int i = 0; i < 6; i++) {
            map.put(i, "Number:" + i);
        }
        for (String i : map.values()) {
            System.out.println(i);
        }
    }
}

輸出結果:

Number:2
Number:4
Number:1
Number:3
Number:5
Number:0

必須注意的是,只有陣列和實作了 java.util.Iterable 介面的類別可以使用這種方式去尋訪。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

10 + twenty =

返回頂端