增強型 for 迴圈(JDK 5.0 引入),又稱 for-each,本質是語法糖,編譯器會將其轉換為迭代器或索引存取的字節碼。適用於實作 Iterable 介面的集合與陣列。
for (Type element : arrayOrIterable) {
// 使用 element
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ForeachTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// 1. 傳統 for 迴圈(保留索引)
System.out.println("----------傳統 for 遍歷------------");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 2. 增強型 for 迴圈(簡潔,無索引)
System.out.println("---------增強型 for 遍歷-------------");
for (int element : arr) {
System.out.println(element);
}
// 3. 二維陣列遍歷
System.out.println("---------遍歷二維陣列-------------");
int[][] arr2 = {{1,2,3}, {4,5,6}, {7,8,9}};
for (int[] row : arr2) {
for (int element : row) {
System.out.println(element);
}
}
// 4. List 集合三種遍歷對比
List list = new ArrayList<>();
list.add("a"); list.add("b"); list.add("c");
System.out.println("----------方法1:傳統 for-----------");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("----------方法2:迭代器-----------");
for (Iterator it = list.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
System.out.println("----------方法3:增強型 for-----------");
for (String str : list) {
System.out.println(str);
}
}
}
增強型 for 迴圈無法直接獲取索引。若業務邏輯需要索引(如修改集合元素、輸出行號、雙重迴圈比較鄰近元素),請使用傳統 for 或迭代器。
for (int i=0; i。 for (Iterator it = coll.iterator(); it.hasNext(); ) 。| 場景 | 推薦寫法 |
|---|---|
| 唯讀遍歷、不需索引 | 增強型 for(最簡潔) |
| 需索引、需修改集合結構 | 傳統 for 或 ListIterator |
| 並發環境下安全遍歷 | CopyOnWriteArrayList + 增強型 for |
| Stream API 處理(JDK 8+) | list.stream().forEach(...) |
增強型 for 迴圈是 Java 可讀性提升的里程碑。理解其「無索引」本質與適用邊界,能讓你在簡潔與控制力之間做出精準選擇。