Java 5 引入的增強型 for 循環(for-each),簡化了陣列與集合的遍歷寫法,減少索引越界風險,提升程式碼可讀性。本文透過完整範例示範其在一維陣列、多維陣列、Collection 與 List 等資料結構上的應用,並比較傳統 for 循環與 Iterator 的差異。
for (元素型別 變數名 : 陣列或集合) {
// 處理變數
}
package com.david5;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class ForTest {
public static void main(String[] args) {
// 1. 一維陣列
int[] arr = {1, 5, 6, 89, 0};
for (int element : arr) {
System.out.println(element);
}
System.out.println("----------");
// 2. 二維陣列
int[][] brr = {{1, 3, 2}, {2, 5, 7}};
for (int[] row : brr) {
for (int element : row) {
System.out.print(element);
}
System.out.println();
}
System.out.println("===========");
// 3. Collection 介面
Collection<String> co1 = new ArrayList<>();
co1.add("one");
co1.add("two");
co1.add("three");
for (String str : co1) {
System.out.println(str);
}
System.out.println("---------");
// 4. List 介面
List<String> co2 = new ArrayList<>();
co2.add("bb");
co2.add("cc");
co2.add("dd");
for (String str : co2) {
System.out.println(str);
}
System.out.println("------------");
// 5. Iterator 迭代器寫法(等價於 for-each 底層實作)
for (Iterator<String> it = co2.iterator(); it.hasNext(); ) {
String bb = it.next();
System.out.println(bb);
}
System.out.println("----------");
// 6. 傳統 for 循環(需索引操作時適用)
for (int i = 0; i < co2.size(); i++) {
System.out.println(co2.get(i));
}
}
}
1
5
6
89
0
----------
132
257
===========
one
two
three
---------
bb
cc
dd
------------
bb
cc
dd
----------
bb
cc
dd
for (int i=0; i<size; i++) 或 Iterator 配合 remove()。增強型 for 在編譯期會被轉換為 Iterator 模式(陣列則使用索引計數器),因此無法直接移除集合元素,否則會拋出 ConcurrentModificationException。