首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 增強型 for 迴圈(for-each)詳細用法與限制說明

     編輯:Java 相關知識

語法與本質

增強型 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。
  • Iterable:轉為迭代器模式 for (Iterator it = coll.iterator(); it.hasNext(); )。

效能考量

  • 陣列遍歷:增強型 for 與傳統 for 效能相當(JIT 優化後)。
  • 集合遍歷:增強型 for 隱式建立迭代器物件,極高頻熱點路徑可考慮手寫迭代器複用,但通常差異可忽略。

最佳實踐建議

場景推薦寫法
唯讀遍歷、不需索引增強型 for(最簡潔)
需索引、需修改集合結構傳統 for 或 ListIterator
並發環境下安全遍歷CopyOnWriteArrayList + 增強型 for
Stream API 處理(JDK 8+)list.stream().forEach(...)

總結

增強型 for 迴圈是 Java 可讀性提升的里程碑。理解其「無索引」本質與適用邊界,能讓你在簡潔與控制力之間做出精準選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved